设计模式实现(一)——观察者模式的C++实现

一、观察者模式的应用场景

当对象间存在一对多关系时,则使用观察者模式。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。

二、观察者模式的设计图解

三、代码详解

 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 }
View Code

运行结果:

猜你喜欢

转载自www.cnblogs.com/madFish/p/12064144.html
今日推荐