首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

设计模式之观察者模式

设计模式之观察者模式(发布订阅模式)

小王以前上班看美女,被老板抓到几次后,现在有了阴影,好久没敢看了。谁知今天又在看美女,被身边的同事看到了。小王啊今天怎么又敢看美女了,不怕老板了,小王嘿嘿一笑,低声说我有“眼线”。其实小王收买了门口的小美,让小美在领导进屋的时候通知自己。大家一听都很感兴趣,纷纷去找小美了,小美一看人多了,不好通知,索性就建了个群,把需要通知的都拉入群中,在老板进屋的时候,小美会在群中吆喝一声,大家收到赶快回复干活状态。这其实就是观察者模式

观察者模式(Observer Pattern):定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。观察者模式也叫发布订阅模式。观察者模式的通用类图如下:

观察者模式的通用类图

说明下几个角色名称:

1、Subject被观察者,能够动态的添加和删除观察者并管理和通知观察者。

2、Observer观察者,接收到被观察者的信息进行更新。

3、ConcreteSubject具体的被观察者,实现逻辑并且通知事件到观察者。

4、ConreteObserver具体的观察者

先来定义一个被观察者接口,定义一个添加、删除和通知的方法。

被观察者接口

定一个被观察接口,并定义一个更新的方法。

观察者接口

具体的被观察者,实现被观察接口,并定义一个存放观察者的集合,实现添加和删除。

具体被观察者

具体的观察者,实现更新方法。

具体的观察者

一个场景测试类,测试结果如下:

场景测试类

观察者模式的优缺点:

1、优点,观察者和被观察者是抽闲耦合,容易扩展,并且建立了一套触发机制。

2、缺点,一个被观察者多个观察者,如果一个观察者执行缓慢,会影响后面的通知。(异步多线程通知能解决这个问题)

JDK中已经帮我们提供了观察者接口和被观察者的实现,对应的类为java.util.Observable和java.util.Observer。用JDK中的观察者和被观察简单实现,必须设置被观察者中的changed为ture,等有通知的时候才会通知观察者,代码和打印结果如下:

JDK中的观察者和被观察者实现

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200418A0LSQT00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com