设计模式—观察者模式

设计模式—观察者模式

一、概念

观察者模式定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新(The Observer Pattern defines a one-to-many dependency between objects so that when one object changes state, all of its dependents are notified and updated automatically.)。 

二、观察者模式的组成

Subject(被观察的对象接口)

  • 规定ConcreteSubject的统一接口;
  • 每个Subject可以有多个Observer;

ConcreteSubject(具体被观察对象)

  • 维护对所有具体观察者的引用的列表;
  • 状态发生变化时会发送通知给所有注册的观察者。

Observer(观察者接口)

  • 规定ConcreteObserver的统一接口;
  • 定义了一个update()方法,在被观察对象状态改变时会被调用。

ConcreteObserver(具体观察者)

  • 维护一个对ConcreteSubject的引用;
  • 特定状态与ConcreteSubject同步;
  • 实现Observer接口,通过update()方法接收ConcreteSubject的通知。

 

三、应用场景

  • 对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。
  • 对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。

 

四、优缺点

优点:

  • Subject和Observer之间是松偶合的,分别可以各自独立改变。
  • Subject在发送广播通知的时候,无须指定具体的Observer,Observer可以自己决定是否要订阅Subject的通知。
  • 遵守大部分GRASP原则和常用设计原则,高内聚、低偶合。

缺陷:

  • 松偶合导致代码关系不明显,有时可能难以理解。
  • 如果一个Subject被大量Observer订阅的话,在广播通知的时候可能会有效率问题。(毕竟只是简单的遍历)

  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值