设计模式之美(c++)-笔记-56-观察者模式

Posted 欢乐的企鹅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之美(c++)-笔记-56-观察者模式相关的知识,希望对你有一定的参考价值。

设计模式要干的事情就是解耦,创建型模式是将创建和使用代码解耦,结构型模式是将不同功能代码解耦,行为型模式是将不同的行为代码解耦,具体到观察者模式,它将观察者和被观察者代码解耦。借助设计模式,我们利用更好的代码结构,将一大坨代码拆分成职责更单一的小类,让其满足开闭原则、高内聚低耦合等特性,以此来控制和应对代码的复杂性,提高代码的可扩展性。

观察者模式的应用场景非常广泛,小到代码层面的解耦,大到架构层面的系统解耦,再或者一些产品的设计思路,都有这种模式的影子,比如,邮件订阅、RSS Feeds,本质上都是观察者模式。不同的应用场景和需求下,这个模式也有截然不同的实现方式,有同步阻塞的实现方式,也有异步非阻塞的实现方式;有进程内的实现方式,也有跨进程的实现方式。

 

观察者模式的模板代码

struct Message


;

struct Observer 
	virtual void update(Message message) = 0;
;

struct Subject 
	virtual void registerObserver(Observer* observer) = 0;
	virtual void removeObserver(Observer* observer) = 0;
	virtual void notifyObservers(Message message) = 0;
;

class ConcreteSubject : public Subject 
public:
	void registerObserver(Observer* observer) 
		observers.push_back(observer);
	

	void removeObserver(Observer* observer) 
		observers.remove(observer);
	

	void notifyObservers(Message message) 
		for (auto observer : observers) 
			observer->update(message);
		
	

private:
	list<Observer*> observers;
;

class ConcreteObserverOne : public Observer 
public:
	void update(Message message) 
		//TODO: 获取消息通知,执行自己的逻辑...
		cout << "ConcreteObserverOne is notified." << endl;
	
;

class ConcreteObserverTwo : public Observer 
public:
	void update(Message message) 
		//TODO: 获取消息通知,执行自己的逻辑...
		cout << "ConcreteObserverTwo is notified." << endl;
	
;

class Demo 
public:
	static void main() 
		ConcreteSubject subject = ConcreteSubject();

		auto obs1 = make_shared<ConcreteObserverOne>();
		auto obs2 = make_shared<ConcreteObserverTwo>();

		subject.registerObserver(obs1.get());
		subject.registerObserver(obs2.get());
		subject.notifyObservers(Message());
	
;

 

以上是关于设计模式之美(c++)-笔记-56-观察者模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之美-行为型-观察者模式

设计模式之美(c++)-笔记-48-代理模式

设计模式之美(c++)-笔记-48-代理模式

设计模式之美(c++)-笔记-44-工厂模式

设计模式之美(c++)-笔记-46-建造者模式

设计模式之美(c++)-笔记-51-适配器模式