设计模式---观察者模式(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");
观察者模式:
当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。
提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。
适用于:
定义对象间一种一对多的依赖关系,使得每一个对象改变状态,则所有依赖于他们的对象都会得到通知。
实现方法:
创建观察者对象 设置通知函数,因为往容器(此容器里面放的是被通知对象的指针)里面放
***************************************************************************/
#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
- 设计模式--观察者模式(C++)
- 设计模式--观察者模式(C++)
- 设计模式--观察者模式(C++)
- 设计模式----观察者模式Observer(C++)
- 设计模式之观察者模式(C++)
- 设计模式---观察者模式(C++)
- 设计模式之观察者模式(c++)
- 设计模式(观察者模式)
- Observer 观察者模式 (HeadFirst设计模式 c#)
- C语言和设计模式(观察者模式)
- C语言和设计模式(观察者模式)
- C语言和设计模式(观察者模式)
- 07.C语言和设计模式(观察者模式)
- 20、C语言和设计模式(观察者模式)
- 设计模式——观察者模式(C++)
- 学习设计模式--观察者模式(C++)
- 学习设计模式--观察者模式(C++)
- 观察者模式(C++)
- 程序员专用网站
- mysql 查看表的创建时间的语句。
- 电力系统各种研究领域和主题 【电力系统英文原版书籍推荐】
- 【Unity优化】构建一个拒绝GC的Lis
- Kth Largest Element in an Array
- 设计模式---观察者模式(C++)
- Xtreme9.0
- InputFormat的数据划分、Split调度、数据读取三个问题的浅析
- Minibach kmeans 方法
- 希尔排序(shell sort):c++
- laravel之队列使用
- 机器学习-2算法的评估
- eclipse wizard dialog 按钮控制
- JAVA4种线程池的使用