设计模式-观察者模式

设计模式-观察者模式

前言

由于作者做的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<Observer*> 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接口通知所有观察者信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值