设计模式-观察者模式

适用场景:当一个对象的行为依赖于另外一个对象的状态时,例QQ聊天界面,必须依赖Socket接收到一条消息时才会更新界面显示消息。

优势:如果不使用观察者模式提供的通用结构,让我们另行设计一个监听对象所依赖的状态,估计只能使用线程来监听了,但是在一个复杂的系统中,我们可能需要多个线程来实现这一功能,这将产生系统性能额外的负担,观察者模式的意义就是他可以在单线程中及时得知某一对象所依赖的状态是否发生改变。

下面我们来看看观察者的经典结构(如下UML图):


ISubject是被观察的对象,他可以增加/删除观察者。IObserve是观察者,它依赖于ISubject的状态变化,当ISubject状态变化的时候会通过infrom()方法通知观察者。

观察者模式的主要角色如表

观察者模式角色
角色作用
主题接口指被观察对象,当其状态发生改变或某事件发生时,会将这个变化通知观察者
具体主题实现了主题接口中所有方法。其内部维护了一个观察者列表
观察者接口观察者接口定义了观察者的基本方法,当依赖状态发生变化的时候调用
具体观察者实现了观察者接口的基本方法,处理具体被观察者状态发生变化的业务逻辑

我们只需要在被观察对象内维护一个观察者列表,当对象状态发生变化时,告诉相应的观察者即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值