观察者模式是一种行为型设计模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知被自动更新。
结构性 代码示例#include <algorithm>#include <iostream>#include <list>#include <string>class Observer {public: Observer() {} virtual ~Observer() {} virtual void Update() = 0;};class Subject {public: Subject() {} virtual ~Subject() {} void Attach(Observer* observer) { _observers.push_back(observer); } void Detach(Observer* observer) { _observers.remove(observer); } void Notify() { for (auto observer : _observers) { observer->Update(); } } virtual std::string GetState() const { return _subjectState; } virtual void SetState(const std::string& state) { _subjectState = state; }protected: std::list<Observer*> _observers; std::string _subjectState;};class ConcreteSubject : public Subject {public: ConcreteSubject() {} virtual ~ConcreteSubject() {} void SetState(const std::string& state) override { _subjectState = "concrete subject state <" + state + ">"; }};class ConcreteObserver : public Observer {public: ConcreteObserver(Subject* subject) : _subject(subject) {} virtual ~ConcreteObserver() {} void Update() override { _observerState = _subject->GetState(); std::cout << "Observe subject state: " << _observerState << std::endl; }protected: Subject* _subject; std::string _observerState;};int main(int argc, char* argv[]) { Subject* subject = new ConcreteSubject(); Observer* observer = new ConcreteObserver(subject); subject->Attach(observer); subject->SetState("state 1"); subject->Notify(); return 0;}适用性当一个抽象模型有两个方面,其中一个方面依赖另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用;当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变;当一个对象必须通知其他对象,而它又不能假定其它对象是谁。换言之,你不希望这些对象是紧密耦合的。
- 随机文章
标签 我的世界观察者模式
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。