观察者模式简单实现

设计模式目录
观察者模式观察者模式:观察者(Observer)关心被观察者(Subject)的某个状态(subjectState),一旦状态变化,观察者就能收到通知(Notify),并更新自己的状态(observerState)。

动机:在软件构建 过程中,我们需要为某些对象建立一种“通知依赖关系” 一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面 向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。
意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。
与其他模式关系
1.与访问模式有类似的地方,但访问者模式是双向依赖,二维变化。而观察者是单向的。

观察者模式通常是一对多的关系,但我为了体现该模式的重点(即:被观察者一旦变化,观察者能自动的适应变化,把这种依赖固话,用以弱化这种依赖关系),所以我没有体现一对多的关系(但你要知道1是被观察者,多是观察者)。
https://blog.csdn.net/xie__jin__cheng/article/details/87933229(这里实现了一对多关系的代码)
如果是初学者,建议照着类图自己写一遍代码,比看10页别人写的说明更有用。
代码如下:

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

class Observer
{	
public:
	virtual void Update()=0;
};
//Observer::index = 0;
class Subject
{
public:
	Observer* pObserver;
	void Atatch(Observer* o){
		pObserver = o;
	}
	void Detach(){
		pObserver = 0;	
	}
	void Notify(){
		pObserver->Update();					
	}
};
// 具体层
class ConcreateSubject:public Subject{
public:
	int subjectState;
	int getState(){
		return subjectState;
	}
};
class ConcreateObserver:public Observer{
public:
	int observerState;
	ConcreateSubject* pSubject;
	virtual void Update(){
		observerState = pSubject->getState();
		cout<<"observerState:"<<observerState<<"\n";
	}
};


//客户端调用
int main()
{
	cout<<"观察者模式演示\n";
	ConcreateSubject* subject = new ConcreateSubject();
	ConcreateObserver* observer = new ConcreateObserver();
	observer->pSubject = subject;
	subject->Atatch(observer);
	subject->Notify();

	subject->subjectState = 5;
	subject->Notify();


	//看代码不用考虑以下内容
	int cin_a;
	cin>>cin_a;
	return 0;
}
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值