观察者模式

观察者模式有时也被称为发布/订阅模式,该模式定义了一种一对多的依赖关系,可以让多个观察者对象同时监听某一个主题对象,当主题对象的状态发生变化时,通知所有观察者对象,使它们能够自动更新自己。例如某个Text文本框的text属性绑定到X数据源上,当X数据源发生更改时自动同步更新Text的值。被观察者要维护一个观察者的List,逐个通知可能存在性能的问题(比如List很长,或者update的逻辑耗时等)。

//观察者接口public interface IWatcher {public void update(String str);
}

//被观察者接口public interface IWatched {public void addWatcher(IWatcher watcher);public void removeWatcher(IWatcher watcher);public void notifyWatchers(String str);
}

//具体的观察者public class ConcreteWatcher implements IWatcher {@Overridepublic void update(String str) {System.out.println(str);}
}

//具体的被观察者public class ConcreteWatched implements IWatched {private List<IWatcher> watchers = new ArrayList<>();@Overridepublic void addWatcher(IWatcher watcher) {watchers.add(watcher);}@Overridepublic void removeWatcher(IWatcher watcher) {watchers.remove(watcher);}@Overridepublic void notifyWatchers(String str) {    // 通知观察者     for (IWatcher iWatcher : watchers) {iWatcher.update(str);}}
}

package ObserverPattern;public class Main {public static void executeObserverPattern() {System.out.println("Observer Pattern:");IWatched watched = new ConcreteWatched();IWatcher watcher1 = new ConcreteWatcher();IWatcher watcher2 = new ConcreteWatcher();ConcreteWatcher watcher3 = new ConcreteWatcher();watched.addWatcher(watcher1);watched.addWatcher(watcher2);watched.addWatcher(watcher3);watched.notifyWatchers("Hello World!!!");}
}

转载于:https://www.cnblogs.com/chenyongblog/p/5202165.html

设计模式-行为型模式-观察者模式相关推荐

  1. 23种设计模式-行为型模式-观察者模式

    概述 它用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应.在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多 ...

  2. 设计模式 — 行为型模式 — 观察者模式

    目录 文章目录 目录 观察者模式 应用场景 代码示例 观察者模式 观察者模式,必须包含 "观察者" 和 "被观察者" 这两个角色,并且观察者和被观察者之间存在 ...

  3. 设计模式-行为型模式-Observer 观察者模式

    设计模式-行为型模式-Observer 观察者模式 1.简介 软件程序之间的解耦,减少相互之间的依赖关系,但是模块之间又是需要协同工作的: 观察者模式使得一个对象的状态发生改变的时候,已经预约的其他对 ...

  4. 设计模式——行为型模式之责任链模式(简简单单入门责任链,理解I/O流消息怎么逐步传递处理以及服务器框架转发)

    文章目录 前言 一.责任链模式定义 二.责任链模式结构 三.责任链高级应用 四.责任链模式优缺点 设计模式系列文章 结尾 前言 作者更有一系列设计模式文章(还在持续更新),图例丰富,少量代码,适合入门 ...

  5. 设计模式— 行为型模式

    关注公众号获取更多资料 设计模式- 行为型模式 ​ 行为型模式描述的死程序运行时复杂的流程控制,描述了多个类或者对象之间怎样相互协调合作,涉及算法与对象之间的职责分配. ​ 行为型模式是23中设计模式 ...

  6. 设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript

    设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript 简单工厂模式 定义一个接口,三个具体类.然后书写如下,通过选择,生产出相应的对象 // 定义Shape接口 interface Sh ...

  7. 设计模式-创建型模式-建造者模式

    设计模式-创建型模式-建造者模式 建造者模式即生成器模式,将一个复杂的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 代码如下 // 产品类 public class Product{pu ...

  8. 设计模式-行为型模式-中介者模式

    设计模式-行为型模式-中介者模式 行为型模式 划分类和对象的职责. 中介者模式 进销存管理,即采购,销售,库存. 其中类图 代码如下 public class Purchase {// 采购IBM电脑 ...

  9. 设计模式-行为型模式-责任链模式

    设计模式-行为型模式-责任链模式 定义 将请求沿着链传递,然后直到对象处理即可. UML图 代码 基本的责任链 public class Test{public void test(int i, Re ...

最新文章

  1. [HTML/CSS]盒子模型,块级元素和行内元素
  2. 数据结构与算法:异或运算
  3. JDBC连接为什么要释放资源---------示意图
  4. yii引入php文件,Yii2框架中CSS、JS文件引入要领_PHP开发框架教程
  5. processing文本可视化_推荐7个数据可视化工具,让你的信息快速生成可视化
  6. Android BaseAdapter和ViewHolder 优化 解决ListView的item抢焦点问题和item错乱问题
  7. 软件打开时间、窗体透明度、背景色---《用delphi开发共享软件》-15.1任务管理器...
  8. QT的QDial类的使用
  9. php ajax队列,AJAX请求队列实现
  10. 定义一个Point类,派生出Circle类,计算各派生类对象的面积Area()
  11. 怎样去除excel表中的虚线_Excel表格里的虚线如何去掉?
  12. 【深度学习】使用预训练模型
  13. INIT: vesion 2.88 booting
  14. 子网掩码计算java,JAVA获取子网掩码源代码
  15. Axure原型设计工具--产品经理必备
  16. ModifyStyle, ModifyStyleEx
  17. centos7 Rsync服务端和windows cwRsync实现数据同步(增量备份)
  18. Cell子刊:北大姜长涛组发现HIF-2α通过肠道菌群调控脂肪产热
  19. Shader学习12——简易图片叠加
  20. 实用的电脑绘图软件——亿图图示

热门文章

  1. python列表的append/entend/insert
  2. GridView合并列下的行单元格的方法
  3. 根据checkbox组的选中状态给list数组赋值
  4. PHP中上传文件文件名乱码
  5. react的一些思考
  6. 一次thinkphp框架 success跳转卡顿问题的解决
  7. thinkphp5+workerman搭建微信小程序socket后台,建立自己的聊天室
  8. POJ 3517 And Then There Was One( 约瑟夫环模板 )
  9. linux添加zip扩展
  10. javascript中函数参数以及函数中局部变量作用域一点点理解