Head First设计模式·观察者模式

本文介绍了一种设计模式——观察者模式,它定义了对象间的一对多依赖关系,确保一旦某个对象状态发生变化,所有依赖于它的对象都能得到通知并自动更新。文章通过一个客户订阅优惠信息的具体例子来阐述其应用场景及实现方式。

一、意图:

定义对象之间一对多依赖,当被依赖对象的状态改变时,所有依赖对象能自动收到通知和更新自己。

二、应用场景:

  1. 当一个对象改变时,需要改变其他对象,但并不了解其他对象的数量;
  2. 当一个对象应当负责通知其他对象的职责实现时,降低通知对象和被通知对象的耦合。

三、缺点:

  1. 被观察对象状态的更新可能会引起观察者级联更新

四、实例:

COS系统向客户提供优惠信息订阅功能,订阅方式可以是邮箱Email或短信Sms,未来可能会添加社交软件账号Social订阅方式;角色类NewsPublisher实现信息发布业务。如何设计解决该问题?

伪代码:

class NewPublisher{
    list<Observer> ol;
    State s;
    Add(Observer o){
        ol.add(o);
    }
    Remove(Observer o){...}
    Notify(){
        for(Oberver o:ol)
            o.update(s);
    }
};

class Observer{
    virtual update();
};

class EmailO: public Observer{
    update(State s){...}
};

class SmsO: public Observer{...};
class SocialO: public Observer{...};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值