觀察者模式定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽同一個主題對象。這個主題對象在狀態改變時,會通知所有的觀察者對象,讓它們自己能自動更新自己。
//觀察者基類
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;
}