观察者模式(C++)

定义:对象间的一对多关系,当一个对象状态发生改变的时候,其它依赖于它的对象都会得到广播通知并进行自定义动作,通过面向对象技术的多态技术,可以降低这种依赖关系,降低耦合度。包含订阅者、观察者两种角色。

注:Qt中的信号槽机制就是应用的观察者模式

        代码:

class ObserverBase
{
 public:
     ObserverBase() {}
     virtual ~ObserverBase() {}
     virtual void Update(){}
};

class ObserverOneChild : public ObserverBase
{
    void Update()override
    {
        std::cout<<"notify ObserverOneChild"<<std::endl;
    }
};
class ObserverTwoChild : public ObserverBase
{
    void Update() override
    {
    std::cout << "notify ObserverTwoChild" << std::endl;
    }
};

class NotifyBase
{
public:
    void Add(ObserverBase *ob)
    {
        observers.emplace_back(ob);
    };
    void Remove(ObserverBase *ob)
    {
        observers.remove(ob);
    }
    void Notify()
    {
        for (auto &observer : observers)
        {
            observer->Update();
        }
    }
private:
     std::list<ObserverBase *> observers;
};
int main()
{
    ObserverBase *base1 = new ObserverOneChild();
    ObserverBase *base2 = new ObserverTwoChild();
    NotifyBase notify;
    notify.Add(base2);
    notify.Add(base1);
    notify.Notify();
    notify.Remove(base1);
    notify.Notify();
    delete base2;
    delete base1;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值