在上一篇我們推導出需要 Subject 抽象基礎類別的原因,但讀者有沒有發現,不同股票主題類別其實是一樣的,只是值不一樣,所以 API 才可以如此設計,那如果關注的是不同類型的主題該怎麼辦?例如技術分析頁同時接收股價資料與響應 UI 的操作,讓我們先從一個觀察者對多個不同的主題開始。
Stock 的觀察者模式
class IStockSubject{public: virtual void Subscribe(const std::shared_ptr<IStockObserver>& ob) = 0; virtual void Unsubscribe(const std::shared_ptr<IStockObserver>& ob) = 0; virtual void Notify() = 0;public: virtual std::string GetStockID() const = 0; virtual double GetPrice() const = 0;};
class IStockObserver{public: virtual ~IStockObserver() = 0{}
public: virtual void Update(IStockSubject* pSubject) = 0;};
UI 的觀察者模式
class IUISubject{public: virtual ~IUISubject() = 0 {}public: virtual void Subscribe(const std::shared_ptr<IUIObserver>& ob) = 0; virtual void Unsubscribe(const std::shared_ptr<IUIObserver>& ob) = 0; virtual void Notify() = 0;public: virtual int GetButtonState() const = 0;};
class IUIObserver{public: virtual ~IUIObserver() = 0 {}public: virtual void Update(IUISubject* pSubject) = 0;};
留言
張貼留言