设计模式---观察者模式(C++)

来源:互联网 发布:建筑外文文献数据库 编辑:程序博客网 时间:2024/04/18 18:23
/*************************************************************************
观察者模式:
当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。
提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。
适用于:
定义对象间一种一对多的依赖关系,使得每一个对象改变状态,则所有依赖于他们的对象都会得到通知。
实现方法:
创建观察者对象 设置通知函数,因为往容器(此容器里面放的是被通知对象的指针)里面放
***************************************************************************/
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Secretary;
class PlayserObserver//玩游戏的同事类(观察者)
{
public:
PlayserObserver(string name)//通过构造函数完成观察者的初始化
{ m_name = name;}
void update(string action)
{
cout<< m_name <<"收到:"<< action << endl;
}
private:
string m_name;
};
class Secretary//秘书类(主题对象,通知者)
{
public:
void addObserver(PlayserObserver *o)
{ v.push_back(o);}
void Notify(string action)
{
for (vector<PlayserObserver *>::iterator it = v.begin(); it != v.end(); it++)
{ (*it)->update(action);}
}//此处容器拥有观察者对象的指针,然后带着参数去遍历不同观察者的统一接口的接受函数,显示接受到此消息
private:
vector<PlayserObserver *> v;
};
void main()
{
Secretary *s1 = new Secretary;//subject 被观察者


PlayserObserver *po1 = new PlayserObserver("小张");//具体的观察者 被通知对象
PlayserObserver *po2 = new PlayserObserver("小李");
s1->addObserver(po1);//将其放进通知队列
s1->addObserver(po2);


s1->Notify("老板来了");//此处的通知函数是带有参数的
system("pause");

}

参考:传智播客--王保明

0 0
原创粉丝点击