0
点赞
收藏
分享

微信扫一扫

『PyTorch学习笔记』分布式深度学习训练中的数据并行(DP/DDP) VS 模型并行

yellowone 2023-12-01 阅读 38

定义

观察者模式是一种软件设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象,当主题对象发生变化时,所有的观察者对象都会得到通知并且自动更新。

在观察者模式中,有三个核心角色:

实现举例

#include <iostream>
#include <vector>
#include <string>

// 定义观察者接口
class Observer {
public:
    virtual void update(std::string message) = 0;
};

// 定义具体观察者实现类
class ConcreteObserver : public Observer {
public:
    void update(std::string message) override {
        std::cout << "ConcreteObserver received message: " << message << std::endl;
    }
};

// 定义主题接口
class Subject {
public:
    virtual void registerObserver(Observer* observer) = 0;
    virtual void removeObserver(Observer* observer) = 0;
    virtual void notifyObservers(std::string message) = 0;
};

// 定义具体主题实现类
class ConcreteSubject : public Subject {
public:
    std::vector<Observer*> observers;

    void registerObserver(Observer* observer) override {
        observers.push_back(observer);
    }

    void removeObserver(Observer* observer) override {
        for (auto it = observers.begin(); it != observers.end(); ++it) {
            if (*it == observer) {
                observers.erase(it);
                break;
            }
        }
    }

    void notifyObservers(std::string message) override {
        for (auto observer : observers) {
            observer->update(message);
        }
    }
};

int main() {
    ConcreteSubject subject;
    ConcreteObserver observer1, observer2, observer3;
    subject.registerObserver(&observer1);
    subject.registerObserver(&observer2);
    subject.registerObserver(&observer3);
    subject.notifyObservers("Hello World!"); // 发送通知,所有观察者都会收到消息并更新。
    subject.removeObserver(&observer2); // 移除一个观察者。
    subject.notifyObservers("Goodbye World!"); // 发送通知,剩余的观察者会收到消息并更新。
    return 0;
}

总结

观察者模式具有以下特性:

举报

相关推荐

0 条评论