java设计模式--观察者(发布订阅) 旧城等待, 2024-04-17 20:15 104阅读 0赞 **1、概述: ** 观察者模式又称“发布订阅模式”定义一种一对多的依赖关系,让多个观察者对象同时监视着被观察者的状态,当被观察者的状态发送变化时,会通知所有的观察者,并让其自动更新自己。 例如,现实中一个商家有一些产品,和电商合作,当有新产品时,会把这些产品推送到电商。例如京东,伪代码如下: if(产品库有新产品) \{ 推送到京东; \} 如果公司又和苏宁合作,那么就得改代码 if(产品库有新产品)\{ 推送到京东; 推送到苏宁; \} 这样后面有新合作伙伴,频繁修改if太麻烦了。 这时,采用观察者模式更易于扩展,责任也清晰。把每一个电商接口看成一个观察者,每个观察者都能观察到产品列表(被监听对象)。当公司发布新产品时,就会发送到这个产品列表上,于是产品列表(被监听对象)就发生了变化,这是就可以触发各个电商接口(观察者)发送新产品到对应的合作电商那里。 **二、实例:** 1、 观察者模式要求同时存在观察者和被观察者双方,观察者可以是多个,在java中,需要去继承java.util.Observable类,先看被观察者-一个产品列表,代码如下: public class ProductList extends Observable\{ private List<String> productList=null;//产品列表 private static ProductList instance;//类唯一实例 private ProductList() \{\}//构建方法私有化 /\*取得唯一实例\*/ public static ProductList getInstance() \{ if (instance==null) \{ instance=new ProductList(); instance.productList=new ArrayList<String>(); \} return instance; \} /\*增加观察者\*/ public void addProductListObservere(Observer observer) \{ this.addObserver(observer); \} /\*新增产品\*/ public void addProduct(String newProduct) \{ productList.add(newProduct); System.out.println("新增了产品"+newProduct); this.setChanged();//设置被观察者发生了变化 this.notifyObservers(newProduct);//通知观察者 \} \} 其中: 1)构造方法私有化,避免通过new方式创建对象,二是通过getInstance方法获得产品列表单例,这里使用的是单例模式。 2)addProductListObserver可以增加一个电商接口(观察者) 3)核心逻辑在addProduct方法上。在产品列表上增加了一个新的产品,然后调用setChanged方法,这个方法告知观察者当前被观察者发生了变化,如果没有,则无法触发其行为,最后通过nitifyObservers告知观察者,让它发生相应的动作,并将新产品作为参数传递给观察者。 2、观察者需要实现java.util.Observer接口的update方法 public class JingDongObserver implements Observer \{ @Override public void update(Observable o,Object product) \{ String newProduct=(String) product; System.out.println("发送新产品【"+newProduct+"】同步到京东商城"); \} \} 3、下面测试观察者模式: public class TestObserver \{ public static void main(String\[\] args) \{ ProductList observable=ProductList.getInstance(); JingDongObserver jDongObserver=new JingDongObserver(); observable.addObserver(jDongObserver); observable.addProduct("新增产品1"); \} \} 结果如下: ![20190831130126183.png][] [20190831130126183.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/17/507a91c3181940f8804b5afdf269c5af.png
相关 java设计模式--观察者(发布订阅) *1、概述: ** 观察者模式又称“发布订阅模式”定义一种一对多的依赖关系,让多个观察者对象同时监视着被观察者的状态,当被观察者的状态发送变... 旧城等待,/ 2024年04月17日 20:15/ 0 赞/ 105 阅读
相关 观察者模式 vs 发布订阅模式 目录 场景 观察者模式 发布订阅模式 总结 -------------------- 场景 有一回面试,面试官问: 末蓝、/ 2023年10月06日 19:03/ 0 赞/ 48 阅读
相关 【JavaScript 设计模式】观察者模式与发布订阅模式 JavaScript 设计模式系列文章: [设计模式总览][Link 1] [工厂模式][Link 2] [单例模式][Link 3] [观察者模式/ Bertha 。/ 2022年12月04日 07:58/ 0 赞/ 261 阅读
相关 订阅发布和观察者模式 发布订阅模式 > 把多个方法暂存起来,最后一次触发执行 作用: 解偶 使用场景: 如,多个类或者函数内,可以分散订阅某个操作,最后统一发布。分散的好处就是不 ╰+攻爆jí腚メ/ 2022年08月28日 14:47/ 0 赞/ 240 阅读
相关 java笔记--设计模式之观察者(订阅/发布)模式 1.定义 定义对象间的一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 野性酷女/ 2022年08月19日 09:00/ 0 赞/ 226 阅读
相关 观察者模式(发布-订阅者模式) 观察者模式定义了一种依赖关系,解决了主体对象和观察者之间功能的耦合,主要应用于大型项目的模块化开发中,解决团队开发中模块之间的通信问题,利用观察者模式还可以实现自定义事件。 素颜马尾好姑娘i/ 2022年05月22日 06:00/ 0 赞/ 249 阅读
相关 设计模式之观察者模式(发布订阅模式) 说明:本文参照《大话设计模式》中的案例做简要解析 观察者模式: 又叫发布-订阅模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。 深藏阁楼爱情的钟/ 2022年05月21日 10:39/ 0 赞/ 299 阅读
相关 javascript 观察者模式 发布订阅模式 观察者模式 观察者模式,每一个观察者对象有两个方法 添加监听`subscribe` 发布事件`publish` 观察者有个`list`存放所有的已经添加监 本是古典 何须时尚/ 2022年04月24日 10:14/ 0 赞/ 242 阅读
相关 发布订阅模式(观察者模式) 设计模式的目的就是使类成为可复用的组件。 在观察者模式中观察者接口只注重被观察者,而被观察者接口只注重观察者,具体是观察者接口实现类中的哪一个并不在意,而被观察者也是如此。这 清疚/ 2021年12月15日 00:27/ 0 赞/ 326 阅读
还没有评论,来说两句吧...