← 返回博客列表

模式特点

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。又称发布-订阅模式。

类图

类图

应用场景

示例代码(C++)

// 观察者接口
class Observer {
public: virtual void update(const std::string& event, const std::string& data) = 0;
          virtual ~Observer() = default; };

// 主题 - 机器人状态
class RobotState {
    std::vector<Observer*> m_observers;
public:
    void subscribe(Observer* o) { m_observers.push_back(o); }
    void notify(const std::string& event, const std::string& data) {
        for (auto* o : m_observers) o->update(event, data);
    }
    void setStatus(const std::string& status) {
        notify("状态变更", status);
    }
};

// 具体观察者 - UI显示
class UIDisplay : public Observer {
public: void update(const std::string& e, const std::string& d) override {
    std::cout << "[UI] " << e << ": " << d << std::endl; }};

// 具体观察者 - 日志记录
class Logger : public Observer {
public: void update(const std::string& e, const std::string& d) override {
    std::cout << "[LOG] " << e << ": " << d << std::endl; }};

RobotState state;
state.subscribe(new UIDisplay());
state.subscribe(new Logger());
state.setStatus("运动中");  // 同时通知 UI 和日志