标签:使用 class return 观察者模式 onclick names observer push system
当对象间存在一对多关系时,则使用观察者模式。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。
1 #include "pch.h" 2 #include <iostream> 3 #include <list> 4 #include <string> 5 using namespace std; 6 class IObserver; 7 8 class ISubject { 9 private: 10 list<IObserver*> observerList; 11 public: 12 int state; 13 public: 14 void AddObserver(IObserver *obs); 15 void RemoveObserver(IObserver *obs); 16 virtual void Notified(IObserver*) = 0; 17 virtual void SetState(int value) = 0; 18 void Update() { 19 for (auto ob : observerList) { 20 if (ob != NULL) { 21 Notified(ob); 22 } 23 } 24 } 25 }; 26 27 void ISubject::AddObserver(IObserver *obs) { 28 observerList.push_back(obs); 29 } 30 31 void ISubject::RemoveObserver(IObserver *obs) { 32 observerList.remove(obs); 33 } 34 35 class IObserver { 36 public: 37 virtual void Received(ISubject*) = 0; 38 }; 39 40 class Subject : public ISubject { 41 public: 42 Subject() :ISubject(){} 43 void Notified(IObserver *obs) { 44 obs->Received(this); 45 } 46 void SetState(int value) override { 47 state = value; 48 } 49 }; 50 51 class Observer : public IObserver { 52 public: 53 Observer(const string &n) { 54 name = n; 55 } 56 void Received(ISubject *sub) { 57 value = sub->state; 58 cout << "this is " + name + " OBer, Received value = "<< value << endl; 59 } 60 private: 61 string name; 62 int value; 63 }; 64 65 int main() 66 { 67 Subject subObj; 68 Observer* observer1 = new Observer("xiaoming"); 69 Observer* observer2 = new Observer("xiaohong"); 70 subObj.AddObserver(observer1); 71 subObj.AddObserver(observer2); 72 subObj.SetState(100); 73 subObj.Update(); 74 system("pause"); 75 return 0; 76 }
运行结果:
标签:使用 class return 观察者模式 onclick names observer push system
原文地址:https://www.cnblogs.com/madFish/p/12064144.html