观察者模式

        观察者模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。

观察者模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。


#include <iostream>
using namespace std;
#include "string"
#include "list"


class sentinel;

class soldier	//观察者 
{
public:
	virtual void rec_info(string info) = 0;
};

class sentinel
{
public:
	sentinel()
	{
		army.clear();
	}

	virtual void send_info(string info) = 0;	//发送消息接口

public:
	list<soldier*> army;	//观察者集合
};

class clairvoyance :public sentinel
{
public:
	virtual void send_info(string info)
	{	
		for (auto s : army)
		{
			s->rec_info(info);
		}
	}
};

class Omniscient :public sentinel
{
public:
	virtual void send_info(string info)
	{
		for (auto s : army)
		{
			s->rec_info(info);
		}
	}
};

class old_soldier :public soldier
{
	virtual void rec_info(string info)
	{
		cout << info << endl;
		cout << "我是老兵!\n";
	}
};

class fresh_soldier :public soldier
{
	virtual void rec_info(string info)
	{
		cout << info << endl;
		cout << "我是新兵,谢谢提醒!\n";
	}
};

void main()
{
	sentinel* sent = new clairvoyance();

	soldier* old = new old_soldier();
	soldier* fre = new fresh_soldier();

	sent->army.push_back(old);
	sent->army.push_back(fre);

	sent->send_info("我是千里眼,我看见大批敌军接近!");
	sent->send_info("我是千里眼,我看见敌军走远!");

	delete sent;
	sent = new Omniscient();

	sent->army.push_back(old);
	sent->army.push_back(fre);

	sent->send_info("我是顺风耳,我听见大批敌军接近!");
	sent->send_info("我是顺风耳,我听见敌军走远!");

	delete sent;
	delete old;
	delete fre;

	system("pause");
	return;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值