观察者模式(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 函数中,创建了两个观察者对象并注册到被观察者中,当被观察者的状态发生变化时,通知观察者执行相应的更新操作。

相关内容

热门资讯

黑科技ai代打!aapoker... 黑科技ai代打!aapoker怎么进俱乐部(ai代打)太坑了是有挂(AI教程黑科技教程)-哔哩哔哩;...
黑科技免费(红龙扑克辅助器原理... 黑科技免费(红龙扑克辅助器原理)外挂透视辅助插件(透视)一贯是有挂(黑科技细节)-哔哩哔哩;1、让任...
黑科技攻略"aapo... 黑科技攻略"aapoker辅助工具存在吗"微扑克ai辅助神器(果然真的是有挂)-哔哩哔哩1、让任何用...
黑科技游戏!fishpoker... 黑科技游戏!fishpoker有没有挂(黑科技)太坑了是有挂(扑克教程黑科技攻略)-哔哩哔哩1)fi...
黑科技辅助挂(微扑克辅助挂)外... 黑科技辅助挂(微扑克辅助挂)外挂透明挂辅助下载(透视)其实真的是有挂(黑科技介绍)-哔哩哔哩1、每一...
黑科技存在"wepo... 黑科技存在"wepoke透明挂在哪买"德扑计算胜率软件(一贯是真的有挂)-哔哩哔哩暗藏猫腻,小编详细...
黑科技能赢!wpk俱乐部盈利模... 黑科技能赢!wpk俱乐部盈利模式(ai代打)太坑了是有挂(我来教教你黑科技详情)-哔哩哔哩;wpk俱...
黑科技计算(aa poker智... 黑科技计算(aa poker智能ai辅助价格)外挂透明挂辅助助手(透视)都是存在有挂(黑科技攻略)-...
黑科技模拟器"鱼扑克... 黑科技模拟器"鱼扑克有挂吗"aapoker智能ai辅助(竟然真的有挂)-哔哩哔哩所有人都在同一条线上...
黑科技攻略!xpoker透视辅... 黑科技攻略!xpoker透视辅助(黑科技ai)太坑了真的有挂(辅助教程黑科技规律)-哔哩哔哩;1、x...