观察者模式(C++实现)
创始人
2025-02-11 03:03:00
0

观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新

观察者模式的核心思想

观察者模式通过分离观察者和被观察者(也称为主题或发布者),实现了对象之间的松耦合。被观察者维护一组观察者对象,并提供添加、删除和通知观察者的方法。观察者对象通过注册到被观察者上,当被观察者状态发生变化时,通知观察者执行相应的更新操作。

观察者模式的角色

观察者模式包括以下角色:

  1. 被观察者(Subject):也称为主题或发布者,维护一组观察者对象,提供方法用于注册、删除和通知观察者。
  2. 观察者(Observer):定义一个更新接口,当被观察者状态发生变化时,被通知执行相应的更新操作。
  3. 具体被观察者(Concrete Subject):实现被观察者接口,维护观察者对象列表,并在状态发生变化时通知观察者。
  4. 具体观察者(Concrete Observer):实现观察者接口,定义具体的更新行为。
观察者模式的优点
  1. 松耦合:被观察者和观察者之间解耦,减少对象之间的直接依赖。
  2. 可扩展性:可以轻松添加新的观察者和被观察者,而不影响现有代码。
  3. 可重用性:观察者模式使得被观察者和观察者之间的交互变得灵活,可以在不同的场景中重用。
代码实现
#include  #include   // 观察者接口 class Observer { public:     virtual void update() = 0; };  // 具体观察者 class ConcreteObserver : public Observer { public:     void update() override {         std::cout << "Received update notification." << std::endl;     } };  // 被观察者接口 class Subject { private:     std::vector observers;  public:     void attach(Observer* observer) {         observers.push_back(observer);     }      void detach(Observer* observer) {         auto it = std::find(observers.begin(), observers.end(), observer);         if (it != observers.end()) {             observers.erase(it);         }     }      void notify() {         for (Observer* observer : observers) {             observer->update();         }     } };  // 具体被观察者 class ConcreteSubject : public Subject { public:     void doSomething() {         // 做一些事情...         // 当状态发生改变时通知观察者         notify();     } };  int main() {     ConcreteObserver observer1;     ConcreteObserver observer2;      ConcreteSubject subject;     subject.attach(&observer1);     subject.attach(&observer2);      // 被观察者状态改变时,通知观察者     subject.doSomething();      return 0; } 

在这个示例中,ConcreteSubject 是具体的被观察者,继承自 Subject 接口。ConcreteObserver 是具体的观察者,继承自 Observer 接口。main 函数中,创建了两个观察者对象并注册到被观察者中,当被观察者的状态发生变化时,通知观察者执行相应的更新操作。

相关内容

热门资讯

透视脚本!hhpoker辅助挂... 透视脚本!hhpoker辅助挂下载(透视)其实真的是有挂,必备教程(有挂插件挂)-哔哩哔哩1、任何h...
透视科技!wepoker安装教... 透视科技!wepoker安装教程,wepoker辅助真的假的,讲义教程(有挂技巧)-哔哩哔哩1、这是...
三分钟揭幕!竞技联盟辅助(透视... 三分钟揭幕!竞技联盟辅助(透视)真是是真的挂,扑克教程(有挂方法)-哔哩哔哩1、在竞技联盟辅助ai机...
透视总结!红龙poker辅助工... 透视总结!红龙poker辅助工具(透视)一贯是真的挂,扑克教程(有挂机制)-哔哩哔哩1、红龙poke...
透视挂!hhpoker辅助靠谱... 透视挂!hhpoker辅助靠谱吗,pokerworld破解版下载,操作教程(真的有挂)-哔哩哔哩1、...
第6分钟曝光!hhpoker有... 第6分钟曝光!hhpoker有没有辅助辅助(透视)一直有挂,必备教程(有挂技巧)-哔哩哔哩1、hhp...
透视脚本!约局吧德州可以透视吗... 透视脚本!约局吧德州可以透视吗(透视)本来有挂,透牌教程(有挂总结)-哔哩哔哩所有人都在同一条线上,...
透视安装!pokerrrr2辅... 透视安装!pokerrrr2辅助,pokemmo脚本辅助器,积累教程(有挂秘诀)-哔哩哔哩pokem...
第3分钟曝光!wepoker私... 第3分钟曝光!wepoker私局辅助(透视)好像是真的挂,技巧教程(确实有挂)-哔哩哔哩wepoke...
透视计算!约局吧德州真的存在透... 您好,约局吧德州真的存在透视吗这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302...