设计模式——观察者模式(observor)

Template、Strategy、Observor属于构件协作类型的设计模式。

motivation:在目标对象状态发生改变时,所有订阅者将得到通知;构建消息通知依赖关系,并使之到达松耦合。

key interface or class:

        1.observor—观察者,在目标状态更新发出通知时,自身进行更新操作(update);

        2.subject—目标对象,可以增加(attach)和减少(detach)观察者,对所有观察者发出通知(notify)。

structure:

template codes:

观察者基类:

//观察者接口
class IObservor{
pubilc:
    virtual void update()==0;
    virtual ~IObservor(){}
protect:
    //根据情况决定是否在此与目标对象进行耦合??
    Subject mySubject;
}

//不同的观察者类型
class Observer1:IObservor{
public:
    Observer1(Subject subject){
        //构造函数,并选择订阅目标对象
        this->mySubject =subject;
        this->mySubject.attch(this);
    }
    void update(){
        //实现该观察者的更新操作
    }
}

//目标对象基类
class Subject{
private:
    List<IObservor*> observersList;
    int state;
puhlic:
    Subject(){
        //构造函数
    }
    int getState(){//获得目标当前状态}
    void setState(int stateValue){//改变目标状态}
    void attch(IObservor observor){
        //增加观察者
        observersList.add(observor);
    }
    void detach(IObservor observor){
        //删减观察者
        observersList.remove(observor);
    }
    void notify(){
        //通知所有的观察者
        List<IObservor*> iter = observersList.begin();
        while(iter != observersList.end()){
            iter->update();
        }
    }    
}

summary:

1. observor模式可以使我们独立地改变目标和观察者,使二者达到松耦合;

2.目标发送通知时,无需指定观察者,通知自动扩散到订阅者;

3.订阅者自己决定是否订阅,目标对次一无所知;

4.observer模式是基于事件的UI框架常用的模式,也是MVC模式中常用的模式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值