设计模式之美(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 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();
		auto obs2 = make_shared();

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

 

你可能感兴趣的:(设计模式之美,设计模式,C++,架构)