首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 設計模式:觀察者模式 (Observer Pattern) 完整實作範例 (5/5)

     編輯:關於C語言

觀察者模式實作:具體主題類別

在觀察者模式中,MessageSubject 扮演具體主題角色,負責維護觀察者清單並在狀態變更時通知所有觀察者。以下是完整的 C# 實作碼:

using System;
using System.Collections.Generic;
using System.Text;

namespace Pattern.Observer
{
    /// 
    /// Message 主題(ConcreteSubject)
    /// 
    public class MessageSubject : AbstractMessageSubject
    {
        /// 
        /// 建構函式
        /// 
        /// Message 實體物件
        public MessageSubject(MessageModel mm)
            : base(mm)
        {
        }
    }
}

測試程式碼與執行結果

以下展示如何在 ASP.NET 網頁中使用觀察者模式,建立主題並註冊兩個觀察者(SQL 與 XML 存儲方式):

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using Pattern.Observer;

public partial class Observer : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        MessageSubject m = new MessageSubject(new MessageModel("插入Message", DateTime.Now));

        SqlMessage sqlMessage = new SqlMessage();
        XmlMessage xmlMessage = new XMLMessage();

        m.Attach(sqlMessage);
        m.Attach(xmlMessage);

        // System.Threading.Thread.Sleep(1000);
        // 修改 PublishTime 就會通知所有觀察者
        // m.PublishTime = DateTime.Now;

        Response.Write(m.Notify());
    }
}

執行結果

sql方式:插入Message 2007-5-26 9:38:18
XML方式:插入Message 2007-5-26 9:38:18

當主題的 PublishTime 屬性被修改時,所有已註冊的觀察者都會收到通知並執行各自的處理邏輯,完美展示了觀察者模式「一對多」依賴關係的鬆耦合特性。

觀察者模式類別圖
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved