设计模式(五)之观察者模式

动机

我们可能需要构建一种通知依赖的关系。一个对象状态发生变化的时候,会通知所欲依赖的对象。

20200717104719

观察者模式

class Observer {
     //更新
public:
    virtual void update() = 0;
    virtual ~Observer(){}
    QString mName;
};
class Subject {
 
    //观察者数组
     protected:
     QVector<Observer*> oVector;
 
    //增加一个观察者
    public :
     void addObserver(Observer* observer) {
        oVector.push_back(observer);
    }
 
    //删除一个观察者
     void deleteObserver(Observer* observer) {
        oVector.removeOne(observer);
    }
 
    //通知所有观察者
    void notifyObserver() {
        QVector<Observer*>::iterator iter;
        for (iter=oVector.begin();iter!=oVector.end();iter++){
            qDebug()<<"通知"<<(*iter)->mName<<":老板来了!!!!"<<endl;
            (*iter)->update();
        }
    }
 
};
 
//员工
class ConcreteObserver :public Observer {
 
    public:
    ConcreteObserver(const QString& name){
        mName = name;
    }
        void update() {
        qDebug()<<mName<<"接收到通知:关闭股票行情 继续工作!"<<endl;
    }
 
};
//前台
class ReceptionistSubject :public Subject {
 
    //具体业务
    public :
    ReceptionistSubject(){
 
    }
 
    void  notify() {
        //...
        notifyObserver();
    }
};

应用程序:

    //前台
    ReceptionistSubject Receptionist;
    ConcreteObserver* obz=new ConcreteObserver("张三");
    ConcreteObserver* lisi=new ConcreteObserver("李四");
    Receptionist.addObserver(obz);
    Receptionist.addObserver(lisi);
    Receptionist.notify();

总结

  • 观察者模式使我们独立改变目标与观察者。从而年实现松耦合

  • 目标发送通知,无需指定观察者,会自动将通知发送给所有的观察者

  • 观察者自己决定是否要订阅通知,目标并不知道

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值