行为型模式-观察者模式

观察者模式

概念

观察者模式:当一个对象的状态发生变化时,能自动通知其他关联对象,自动刷新对象。
观察者模式提供提供给关联对象的一种同步通信手段,使某个对象和依赖它的对象之间保持同步状态。

典型应用

  • 侦听事件驱动程序设计中的某个外部事件
  • 侦听某个对象的状态变化
  • 发布者/订阅者模型中,当一个外部事件(消息)被触发时,通知邮件列表中的订阅者。
    总结:定义了对象间的一对多的关系,当每一个对象状态发生变化时,则依赖它的每个对象都会得到通知。

案例

class Listener
{
public:
	virtual void update() = 0;
};

class Notify
{
public:
	virtual void addListener(Listener* listener) = 0;
	virtual void notify() = 0;
};

class Subcriber:public Listener
{
public:
	virtual void update()
	{
		cout << m_name << " view the news" << endl;
	}
	Subcriber(string name)
	{
		m_name = name;
	}
private:
	string m_name;

};
class Publisher : public Notify
{
public:
	virtual void addListener(Listener* listener)
	{
		list.push_back(listener);
	}
	virtual void notify()
	{
		for (Listener* item : list)
		{
			item->update();
		}
	}

private:
	vector<Listener*> list;
};

int main(int argc, char *argv[])
{
	Listener* subcriber1 = new Subcriber("xiaoMing");
	Listener* subcriber2 = new Subcriber("Tom");
	Notify* publisher = new Publisher();
	publisher->addListener(subcriber1);
	publisher->addListener(subcriber2);
	publisher->notify();

	delete subcriber1;
	delete subcriber2;
	delete publisher;
	system("pause");
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值