C++实现设计模式之观察者模式

简介: 什么是观察者模式?观察者模式是一种一对多的以来关系,当一个对象的状态发生改变时,所有依赖于他的对象都得到通知并被自动更新。它的主体是通知的发布者,发出通知时并不需要知道谁是它的观察者,可以有任意数目的观察者订阅并接收通知,将观察者和被观察的对象分离开。

什么是观察者模式


观察者模式是一种一对多的以来关系,当一个对象的状态发生改变时,所有依赖于他的对象都得到通知并被自动更新。它的主体是通知的发布者,发出通知时并不需要知道谁是它的观察者,可以有任意数目的观察者订阅并接收通知,将观察者和被观察的对象分离开。


废话不多说,上代码:

#include <iostream>  
#include <vector>  
using namespace std;  
// 观察者接口  
class Observer {  
public:  
    virtual void update() = 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:  
    vector<Observer*> observers;  
public:  
    void attach(Observer* observer) {  
        observers.push_back(observer);  
    }  
    void detach(Observer* observer) {  
        for (int i = 0; i < observers.size(); i++) {  
            if (observers[i] == observer) {  
                observers.erase(observers.begin() + i);  
                break;  
            }  
        }  
    }  
    void notify() {  
        for (int i = 0; i < observers.size(); i++) {  
            observers[i]->update();  
        }  
    }  
    void stateChanged() {  
        notify();  
    }  
};  
// 具体观察者实现  
class ConcreteObserver : public Observer {  
private:  
    Subject* subject;  
public:  
    ConcreteObserver(Subject* subject) {  
        this->subject = subject;  
        subject->attach(this);  
    }  
    ~ConcreteObserver() {  
        subject->detach(this);  
    }  
    void update() {  
        // 观察者收到通知后执行的操作  
        cout << "Subject changed!" << endl;  
    }  
};  
int main() {  
    ConcreteSubject subject;  
    ConcreteObserver observer1(&subject);  
    ConcreteObserver observer2(&subject);  
    ConcreteObserver observer3(&subject);  
    subject.stateChanged(); // 触发通知,观察者更新  
    return 0;  
}

在上面的代码中,Observer是观察者接口,Subject是主题接口。ConcreteSubject是具体的主题实现,它维护一个观察者列表,并在状态改变时通知所有观察者。ConcreteObserver是具体的观察者实现,它在被通知时执行特定的操作。


在主函数中,我们创建了一个ConcreteSubject实例,并将三个ConcreteObserver实例附加到该主题上。然后,当主题的状态改变时,所有附加的观察者都会收到通知并执行相应的操作。

相关文章
|
1月前
|
设计模式 监控 Java
Kotlin - 改良设计模式 - 观察者模式
Kotlin - 改良设计模式 - 观察者模式
51 3
|
1月前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
|
2月前
|
设计模式 传感器
【设计模式】观察者模式(定义 | 特点 | Demo入门讲解)
【设计模式】观察者模式(定义 | 特点 | Demo入门讲解)
49 0
|
20天前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
22天前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
36 1
|
1月前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
28 3
|
2月前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
36 9
|
2月前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
35 2
|
2月前
|
设计模式 监控 UED
设计模式之观察者模式
【10月更文挑战第12天】 观察者模式是一种行为型设计模式,定义了一对多的依赖关系,当一个对象状态改变时,所有依赖它的对象都会自动更新。主要由主题(被观察者)和观察者组成,实现对象间的松耦合,广泛应用于用户界面、事件驱动系统和数据监控等领域。
|
2月前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
本教程详细讲解Kotlin语法,适合深入学习。对于快速掌握Kotlin,推荐“简洁”系列教程。本文特别介绍了观察者模式,包括使用Java API和Kotlin委托属性(如Delegates.observable)实现的方法,旨在帮助开发者更高效地实现和优化观察者模式的应用。
41 3