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)提供了完整的觀察者管理基礎設施,體現了「依賴抽象而非具體」的設計原則。