高端兼职网站开发,王璞网站开发实战,谷歌广告上海有限公司,制作个人网站的软件观察者模式#xff08;Observer Pattern#xff09;是一种设计模式#xff0c;用于定义对象之间的一对多依赖关系#xff0c;当一个对象#xff08;称为主题或可观察者#xff09;的状态发生变化时#xff0c;它的所有依赖对象#xff08;称为观察者#xff09;都会收…观察者模式Observer Pattern是一种设计模式用于定义对象之间的一对多依赖关系当一个对象称为主题或可观察者的状态发生变化时它的所有依赖对象称为观察者都会收到通知并进行相应的更新。 以下是一个简单的C观察者模式的示例
#include iostream
#include vector
#include algorithm// 观察者基类
class Observer
{
public:virtual void update(int value) 0;
};// 具体观察者类
class ConcreteObserver : public Observer
{
private:int number;public:ConcreteObserver(int number){this-number number;}void update(int value) override{std::cout Current number: this-number std::endl;std::cout new value: value std::endl;}
};// 主题类
class Subject
{
private:std::vectorObserver * observers; // 观察者列表int value;public:Subject(int value){this-value value;}void attach(Observer *observer){observers.push_back(observer);}void detach(Observer *observer){// 从观察者列表中移除观察者auto it std::find(observers.begin(), observers.end(), observer);if (it ! observers.end()){observers.erase(it);}}void notify(){// 通知所有观察者进行更新for (auto observer : observers){observer-update(this-value);}}void changeValue(int newValue){this-value newValue;}
};int main()
{Subject subject(0);ConcreteObserver observer1(1);ConcreteObserver observer2(2);subject.attach(observer1);subject.attach(observer2);subject.notify(); // 所有观察者都会收到通知并进行更新subject.changeValue(10);subject.detach(observer1);subject.notify(); // 只有observer2会收到通知return 0;
}运行结果
Current number: 1
new value: 0
Current number: 2
new value: 0
Current number: 2
new value: 10在上述示例中Observer是观察者的基类定义了一个纯虚函数update()用于在观察者收到通知时进行更新操作。ConcreteObserver是具体的观察者类实现了update()函数。 Subject是主题类维护一个观察者列表并提供了attach()、detach()和notify()函数。attach()用于将观察者添加到观察者列表中detach()用于从观察者列表中移除观察者notify()用于通知所有观察者进行更新操作。 在main()函数中创建了一个主题对象subject和两个观察者对象observer1和observer2。通过attach()函数将观察者添加到主题的观察者列表中然后通过notify()函数通知所有观察者进行更新。可以通过detach()函数将观察者从观察者列表中移除以停止接收通知。