柚子快报激活码怎么申请778899分享:开发语言 C++

http://yzkb.51969.com/

/*

观察者模式是一种常用的设计模式,用于在对象之间建立一种一对多的依赖关系,当被观察的对象发生变化时,

所有依赖于它的对象都能够得到通知并自动更新。下面是一个使用C++实现观察者模式的例子:

*/

#include

#include

// 定义观察者接口

class Observer {

public:

virtual void update(int value) = 0;

};

// 定义被观察者接口

class Subject {

public:

virtual void attach(Observer* observer) = 0;

virtual void detach(Observer* observer) = 0;

virtual void notify() = 0;

};

// 具体的被观察者实现

class ConcreteSubject : public Subject {

private:

int m_value;

std::vector m_observers;

public:

void attach(Observer* observer) override {

m_observers.push_back(observer);

}

void detach(Observer* observer) override {

for (auto it = m_observers.begin(); it != m_observers.end(); ++it) {

if (*it == observer) {

m_observers.erase(it);

break;

}

}

}

void notify() override {

for (auto observer : m_observers) {

observer->update(m_value);

}

}

void setValue(int value) {

m_value = value;

notify();

}

};

// 具体的观察者实现

class ConcreteObserver : public Observer {

public:

void update(int value) override {

std::cout << "Value changed to " << value << std::endl;

}

};

int main() {

ConcreteSubject subject;

ConcreteObserver observer1;

ConcreteObserver observer2;

// 将观察者添加到被观察者的观察列表中

subject.attach(&observer1);

subject.attach(&observer2);

// 修改被观察者的值,观察者将会收到通知

subject.setValue(3);

// 将观察者从被观察者的观察列表中移除

subject.detach(&observer2);

// 再次修改被观察者的值,只有observer1会收到通知

subject.setValue(5);

return 0;

}

/*

在这个例子中,Subject是被观察者的接口,ConcreteSubject是具体的被观察者实现,Observer是观察者的接口,ConcreteObserver是具体的观察者实现。

ConcreteSubject中维护了一个观察列表,可以动态地添加和移除观察者。当被观察者的值发生改变时,它会调用notify方法来通知所有的观察者。

在main函数中,我们创建了一个ConcreteSubject对象和两个ConcreteObserver对象,将它们添加到观察列表中,并修改被观察者的值来测试观察者模式的实现。

*/

1. 运行结果

柚子快报激活码怎么申请778899分享:开发语言 C++

http://yzkb.51969.com/

相关阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。