观察者设计模式

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听同一个主题对象。这个主题对象在状态改变时,会通知所有的观察者对象,让它们自己能自动更新自己。

//观察者基类
class Observer
{
public:
    //为多态基类声明一个虚析构函数
    virtual ~Observer(){}

    //执行方法
    virtual void update() = 0;
};

//观察者A
class ObserverA: public Observer
{
    void update() override
    {
        cout << "update A" << endl;
    }
};

//观察者B
class ObserverB : public Observer
{
    void update() override
    {
        cout << "update B" << endl;
    }
};

//主题类
class Subject
{
public:
    //添加观察者
    void add(Observer *observer)
    {
        observers.push_back(observer);
    }

    //移除观察者
    void remove(Observer *observer)
    {
        auto position = find(observers.begin(), observers.end(), observer);
        observers.erase(position);
    }

    //触发事件,执行订阅方法
    void notify() const 
    {
        for (auto &i : observers)
        {
            i->update();
        }
    }
private:
    std::vector observers;   //观察者容器
};

int main()
{
    Subject sub;
    ObserverA observer1;
    ObserverB observer2;
    sub.add(&observer1);
    sub.add(&observer2);

    sub.notify();
    return 0;
}

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