觀察者設計模式

觀察者模式定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽同一個主題對象。這個主題對象在狀態改變時,會通知所有的觀察者對象,讓它們自己能自動更新自己。

//觀察者基類
class Observer
{
public:
    //為多態基類聲明一個虛析構函數
    virtual ~Observer(){}

    //執行方法
    virtual void update() = 0;
};

//觀察者A
class ObserverA: public Observer
{
    void update() override
    {
        cout << "update A" << endl;
    }
};

//觀察者B
class ObserverB : public Observer
{
    void update() override
    {
        cout << "update B" << endl;
    }
};

//主題類
class Subject
{
public:
    //添加觀察者
    void add(Observer *observer)
    {
        observers.push_back(observer);
    }

    //移除觀察者
    void remove(Observer *observer)
    {
        auto position = find(observers.begin(), observers.end(), observer);
        observers.erase(position);
    }

    //觸發事件,執行訂閱方法
    void notify() const 
    {
        for (auto &i : observers)
        {
            i->update();
        }
    }
private:
    std::vector<Observer*> observers;   //觀察者容器
};

int main()
{
    Subject sub;
    ObserverA observer1;
    ObserverB observer2;
    sub.add(&observer1);
    sub.add(&observer2);

    sub.notify();
    return 0;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 主目錄見:Android高級進階知識(這是總目錄索引)這篇文章我們會來討論另外一個設計模式觀察者設計模式,這個設計...
    ZJ_Rocky閱讀 1,109評論 0 5
  • 首先來看看觀察者模式的概念: 定義對象間的一種一對多的依賴關系,當一個對象的狀態發送改變時,所有依賴于它的對象都能...
    圈圈貓閱讀 298評論 0 0
  • 定義: 定義對象間一種一對多的依賴關系,使得當每一個對象改變狀態,則所有依賴于它的對象都會得到通知并自動更新。 類...
    Not_Found_404閱讀 293評論 0 0
  • 人很多時候都被自己的腦袋控制了,實際上我們應該用心去指引腦袋的。可經常弄反了。每當這時,心會煩躁 抓狂 不安 低落...
    福木閱讀 260評論 0 0
  • 周末的時間,又是夏天,又是暑假,所以,都應該好好享受 正好借著機會練習換一個方式與身體的人溝通 重復一個非常重要的...
    ykxcxlm閱讀 174評論 0 0