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

C# 設計模式:觀察者模式核心抽象主題實作 (4/5)

     編輯:關於C語言

抽象主題類別:觀察者模式的核心骨架

AbstractMessageSubject 定義了主題的核心行為:維護觀察者集合、註冊/移除觀察者、通知機制以及狀態屬性。這是觀察者模式中「主題」角色的抽象化實現。

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

namespace Pattern.Observer
{
    /// 
    /// 抽象 Message 主題(Subject)
    /// 
    public abstract class AbstractMessageSubject
    {
        private MessageModel _messageModel;
        private List<IMessage> list = new List<IMessage>();

        /// 
        /// 建構函式
        /// 
        /// Message 實體物件
        public AbstractMessageSubject(MessageModel mm)
        {
            this._messageModel = mm;
        }

        /// 
        /// 註冊觀察者
        /// 
        /// 實作 IMessage 介面的物件
        public void Attach(IMessage m)
        {
            list.Add(m);
        }

        /// 
        /// 移除觀察者
        /// 
        /// 實作 IMessage 介面的物件
        public void Detach(IMessage m)
        {
            list.Remove(m);
        }

        /// 
        /// 通知所有觀察者
        /// 
        /// 所有觀察者處理結果的字串
        public string Notify()
        {
            string s = "";
            foreach (IMessage i in list)
            {
                s += i.Insert(_messageModel);
                s += "<br />";
            }
            return s;
        }

        /// 
        /// Message 發布時間(狀態變更觸發通知)
        /// 
        public DateTime PublishTime
        {
            get { return _messageModel.PublishTime; }
            set
            {
                _messageModel.PublishTime = value;
                Notify(); // 狀態變更時自動通知
            }
        }
    }
}

關鍵設計點解析

  • 觀察者集合管理:使用 List<IMessage> 儲存所有觀察者,支援動態增減。
  • 通知機制:Notify() 遍歷集合呼叫每個觀察者的 Insert() 方法。
  • 狀態觸發:PublishTime 屬性 setter 中呼叫 Notify(),實現狀態變更自動通知。

這個抽象類別為具體主題(如 MessageSubject)提供了完整的觀察者管理基礎設施,體現了「依賴抽象而非具體」的設計原則。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved