设计模式学习笔记--观察者模式(Observer Pattern)

概念

观察者模式定义了对象之间的一对多的依赖关系,当一个对象(被观察者)改变状态时,它的所有依赖者(观察者)都会收到通知并更新

设计原则

为了交互对象之间的松耦合设计而努力

理解

在这个模式中存在两个角色,一个是 “被观察者”,另一个是 “观察者”,他们之间的关系类似现实生活中的“报刊订阅”,其中被观察者是“报社”,观察者是“用户”,用户在报社购买报刊订阅服务后,报社一旦有新报刊发布,就会通知用户,而如果用户取消订阅,以后报社就不会通知该用户。从报社通知用户到用户得到报刊有两种过程,一种是报社将报刊送到用户家里(push),另一种是用户自己到报社取(pull),其中第一种过程是不管用户是否需要这份报刊,报社都会将最新的报刊送到用户家里,而第二种是用户根据自己的需要,到报社取需要的报刊,这是两种过程的区别。

组成

  • 抽象主题(Subject):也就是抽象被观察者接口,提供增加删除和通知观察者的方法
  • 抽象观察者(Observer):观察者接口,提供更新的方法
  • 具体主题(ConcreteSubject):实现抽象主题接口,因此具有增加删除通知观察者的方法,
  • 具体观察者(COncreteObserver):实现抽象观察者接口,注册具体主题后就可以接收到通知更新

下面是观察者模式的类图

这里写图片描述

实例

以下代码模拟一个报刊订阅的过程,有一家叫做 DailyNews 的报社,Tom 和 Jerry 都注册了这家报社的最新消息订阅服务,每当有最新消息到来,报社就会通知他们,接着 Tom 取消了这个服务,则报社的最新消息不会通知 Tom 而只通知 Jerry。在这个过程中,DailyNews 报社扮演被观察者角色,Tom 和 Jerry 两个用户扮演观察者角色

定义抽象用户接口类:User

定义了具体用户与具体报社之前的通信接口,通过这个接口,报社可以将通知更新给所有已注册用户

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值