设计模式:观察者模式(observer)

设计模式:观察者模式(observer)

  • 这种设计模式大量的使用,简单的说就是观察者通过被观察者来获得外界某种事物的状态

  • Observer模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。
    如下图:


    设计模式:观察者模式(observer)_第1张图片
    image.png
  • 被观察者(concreteSubject):其中必然包含了一个观察者的列表,用于状态发生变化的时候通过链表进行通知每个观察者做出相应的变化

  • 观察者(ConcreteObserver):其中必然包含各种应对外界状态变化的方法,以供被观察者调用

  • 图中还有抽象类Subject和Observer其具体的被观察者和观察者可以通过虚函数从写的方式来重写这些定义好的接口

那么我们做一个列子如下,比如上课的学生等待上课和下课的铃音,那么学生就是观察者上下课铃就是被观察者如下:

/*************************************************************************
 > File Name: test.cpp
 > Author: gaopeng QQ:22389860 all right reserved
 > Mail: [email protected]
 > Created Time: Sat 25 Nov 2017 05:13:21 AM CST
************************************************************************/

#include
#include "vector"
#include "string"
#include

using namespace std;


class StuObserver
{

       private:
               char name[256];
       public:
               StuObserver(const char* name)
               {
                       cout<< name<<"加入学习班!"<name,name);
               }
               int class_begin()
               {

                       cout< v;//包含所有观察者
               int i;
       public:
               bell()
               {
                       i = 0;
                       v.clear();
               }
               ~ bell()
               {

                       v.clear();
                       for(i=0; iclass_begin();
                       }
                       return 0;
               }

               int end_class(const char* class_name)
               {

                       cout<<"每位同学注意:"<class_end();
                       }
                       return 0;
               }     
};



int main(void)
{


       bell m;
       StuObserver* a=new StuObserver("高鹏1");
       StuObserver* b=new StuObserver("高鹏2");
       StuObserver* c=new StuObserver("高鹏3");
       StuObserver* d=new StuObserver("高鹏4");

       m.addObserver(a);
       m.addObserver(b);
       m.addObserver(c);
       m.addObserver(d);

       m.begin_class("数学");
       m.end_class("数学");
       m.begin_class("语文");
       m.end_class("语文");
}

你可能感兴趣的:(设计模式:观察者模式(observer))