观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象之间的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。
- Subject(主题):也被称为Observable,它是被观察的对象。当它的状态发生改变时,会通知所有的观察者。
- Observer(观察者):它是观察Subject的对象,当Subject的状态发生改变时,会收到通知。
观察者模式的主要优点是:
- 当一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这两者封装在独立的对象中以使它们可以各自独立地改变和复用。
- 当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变。
- 当一个对象必须通知其他对象,而它又不能假定其他对象是谁。换言之,你不希望这些对象是紧密耦合的。
以下是一个简单的C++实现的观察者模式(Observer Pattern)示例:
#include <iostream>
#include <list>
// 前向声明
class Observer;
// 主题
class Subject {
public:
void attach(Observer* observer) {
observers_.push_back(observer);
}
void detach(Observer* observer) {
observers_.remove(observer);
}
void notify();
private:
std::list<Observer*> observers_;
};
// 观察者
class Observer {
public:
Observer(Subject* subject) : subject_(subject) {
subject_->attach(this);
}
virtual void update() = 0;
protected:
Subject* subject_;
};
void Subject::notify() {
for (Observer* observer : observers_) {
observer->update();
}
}
// 具体观察者A
class ConcreteObserverA : public Observer {
public:
ConcreteObserverA(Subject* subject) : Observer(subject) {}
void update() override {
std::cout << "Concrete Observer A is updated." << std::endl;
}
};
// 具体观察者B
class ConcreteObserverB : public Observer {
public:
ConcreteObserverB(Subject* subject) : Observer(subject) {}
void update() override {
std::cout << "Concrete Observer B is updated." << std::endl;
}
};
int main() {
Subject subject;
ConcreteObserverA observerA(&subject);
ConcreteObserverB observerB(&subject);
subject.notify();
return 0;
}
在这个例子中,Subject是主题,它维护了一个观察者列表。当主题的状态发生改变时,它会调用notify方法通知所有的观察者。
Observer是观察者,它定义了一个update接口。ConcreteObserverA和ConcreteObserverB是具体的观察者,它们实现了update接口。
通过这种方式,我们可以实现当主题的状态发生改变时,所有观察者都会得到通知并自动更新。
原文地址:https://blog.csdn.net/lanyang123456/article/details/134763080
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_37638.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。