设计模式-观察者模式

设计模式-观察者模式

  • 前言
  • 观察者模式

前言

由于作者做的C++开发比较多所以本文实例都以C++语言方式给出。

观察者模式

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

// 主题接口
class Subject {
public:
    virtual ~Subject() = default;
    virtual void attach(Observer* observer) = 0;
    virtual void detach(Observer* observer) = 0;
    virtual void notify(const std::string& message) = 0;
};

// 具体主题实现
class ConcreteSubject : public Subject {
private:
    std::vector observers_;

public:
    void attach(Observer* observer) override {
        observers_.push_back(observer);
    }

    void detach(Observer* observer) override {
        observers_.erase(std::remove(observers_.begin(), observers_.end(), observer), observers_.end());
    }

    void notify(const std::string& message) override {
        for (Observer* observer : observers_) {
            observer->update(message);
        }
    }
};

// 具体观察者实现
class ConcreteObserver : public Observer {
private:
    std::string name_;

public:
    explicit ConcreteObserver(const std::string& name) : name_(name) {}

    void update(const std::string& message) override {
        std::cout << name_ << " received message: " << message << std::endl;
    }
};

观察者模式的核心概念:Subject维护观察者列表,当状态变化时通知所有观察者。代码包含主题接口、具体主题、观察者接口和具体观察者实现。
主题提供一些状态或者功能信息回调给观察者,可以有多个观察者观察同一个主题。上面例子中通过attach接口向主题注册观察者指针,通过detach接口取消注册观察者指针,主题通过notify接口通知所有观察者信息。

你可能感兴趣的:(设计模式,设计模式,观察者模式)