C++设计模式浅识观察者模式


本文摘自网络,作者黄舟,侵删。

观察者模式(Observer):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主体对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

模式实现:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

[code]//观察者抽象基类

class Observer{

public:

    virtual void Update(int) = 0;

};

//主题、目标

class Subject{

public:

    virtual void Attach(Observer *) = 0;  //重视

    virtual void Detach(Observer *) = 0; //脱离

    virtual void Notify() = 0; //通知

};

 

class ConcreateObserver: public Observer{

private:

    Subject *m_pSubject;   //1.具体观察者,维护一个指向ConcreteSubject对象的引用2.存储有关状态,这些状态应与目标的状态保持一致

public:                     //3.实现Observer的更新接口以使自身状态与目标的状态保持一致

    ConcreateObserver(Subject *pSubject): m_pSubject(pSubject){}

    void Update(int value){

        std::cout << "ConcreateObserver get the update. New State: " << value << std::endl;

    }

};

 

class ConcreateObserver2: public Observer{

private:

    Subject *m_pSubject;

public:

    ConcreateObserver2(Subject *pSubject):m_pSubject(pSubject){}

    void Update(int value){

        std::cout << "ConcreateObserver2 get the update. New State: " << value << std::endl;

    }

};

 

//1.将有关状态存入各ConcreateObserver对象

//2.当它的状态发生改变时,向它的各个观察者发出通知

class ConcreateSubject: public Subject{

private:

    std::list<Observer *> m_ObserverList;

    int m_iState;

public:

    void Attach(Observer *pObserver);

    void Detach(Observer *pObserver);

    void Notify();

 

    void setState(int state){

        m_iState = state;

    }

};

void ConcreateSubject::Attach(Observer *pObserver){

    m_ObserverList.push_back(pObserver);

}

void ConcreateSubject::Detach(Observer *pObserver){

    m_ObserverList.remove(pObserver);

}

void ConcreateSubject::Notify(){

    std::list<Observer *>::iterator it = m_ObserverList.begin();

    while(it != m_ObserverList.end()){

        (*it)->Update(m_iState);

        ++it;

    }

}

客户端:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

[code]int main(){

    //Create Subject

    ConcreateSubject *pSubject = new ConcreateSubject();

 

    //Create Observer

    Observer *pObserver = new ConcreateObserver(pSubject);

    Observer *pObserver2 = new ConcreateObserver2(pSubject);

 

    //Change the state

    pSubject->setState(2);

 

    //Register the observer

    pSubject->Attach(pObserver);

    pSubject->Attach(pObserver2);

 

    pSubject->Notify();  //Output: ConcreateObserver get the update. New State: 2

                                 //ConcreateObserver2 get the update. New State: 2

 

    //Unregister the observer

    pSubject->Detach(pObserver);

 

    pSubject->setState(3);

 

    pSubject->Notify();  //Output: ConcreateObserver2 get the update. New State: 3

 

    delete pObserver;

    delete pObserver2;

    delete pSubject;

}

以上就是C++设计模式浅识观察者模式的内容,更多相关内容请关注PHP中文网(www.php.cn)!

相关阅读 >>

c++设计模式浅识观察者模式

更多相关阅读请进入《C++,设计模式,观察者模式》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...