设计模式之美(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-观察者模式的主要内容,如果未能解决你的问题,请参考以下文章