设计模式之美(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++)-笔记-10-组合

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

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

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