3 行为型模式之 - 观察者模式
观察者模式介绍:
观察者模式是一个使用率非常高的模式,这最深用的地方是GUI系统,订阅--发布系统。因为这个模式一个重要作用就是解耦,将被观察者和观察者解耦,使得他们之间的依赖性更小。
定义:定义对象间一种一对多的关系,使得每当一个对象改变状态,则所有依赖它的对象都会得到通知并被自动更新
使用场景:
1 关联行为场景。需要注意的是,关联行为是可拆分的,而不是“组合”的关系
2 事件多级触发场景
3 跨系统的消息交换场景,如消息队列,事件总线的处理机制
下面我们以生活中的交通灯:以行人过马路说起为例,其中车和行人是观察者,红灯是被观察者,以人的视角为例
观察者:车和行人
被观察者:红灯
红灯亮了(车对面的绿灯也亮了),车行,行人停
代码如下:
1 /** 2 * 观察者 3 */ 4 public abstract class Observer { 5 protected abstract void onChange(); 6 }
1 /** 2 * 观察者:车 3 */ 4 public class Car extends Observer{ 5 @Override 6 protected void onChange() { 7 System.out.println("绿灯亮了,我可以走了"); 8 } 9 }
1 /** 2 * 观察者:行人 3 */ 4 public class People extends Observer{ 5 @Override 6 protected void onChange() { 7 System.out.println("红灯亮了,我要等一等"); 8 } 9 }
下面是被观察者:灯
1 /** 2 * 被观察者:灯 3 */ 4 public class Observable { 5 //观察者集合 6 private ArrayList<Observer> observers = new ArrayList<>(); 7 8 //注册一个观察者 9 public void registerObserver(Observer observer){ 10 observers.add(observer); 11 } 12 13 //反注册一个观察者 14 public void unregisterObserver(Observer observer){ 15 observers.remove(observer); 16 } 17 18 public void dataChanged(){ 19 for (Observer observer : observers){ 20 observer.onChange(); 21 } 22 } 23 24 }
下面是测试类
1 /** 2 * 测试观察者模式 3 */ 4 public class ObserverTest { 5 6 public static void main(String[] args){ 7 8 //创建两个观察者 9 Observer car = new Car(); 10 Observer people = new People(); 11 12 //创建一个被观察者 13 Observable observable = new Observable(); 14 15 //注册两个观察者 16 observable.registerObserver(car); 17 observable.registerObserver(people); 18 19 //被观察者发出某一个事件 20 observable.dataChanged(); 21 22 } 23 24 25 }
被观察者保存一个观察者的列表,被观察者状态一变,就遍历观察者列表并调用观察都onChange函数,但是也有一个弊端,如果观察者过多的话,导致被观察者中的列表太大,会有性能上的问题。所以要视情况而定再使用,当然也可以结合线程池等来优化。
注:设计模式交流学习群 632945466 欢迎所有热爱技术的大牛,小菜,一起学习讨论进步提高,欢迎随时批评指正
转载于:https://www.cnblogs.com/start1225/p/6725295.html
3 行为型模式之 - 观察者模式相关推荐
- 行为型模式:观察者模式
前方高能:<一故事一设计模式>PDF 电子书已经上线,关注公众号即可获取. 行为型模式:观察者模式 十一大行为型模式之七:观察者模式. 简介 姓名 :观察者模式 英文名 :Observer ...
- 行为型模式之观察者模式
学习设计模式,让你提升百倍 专栏 重点文章 设计模式 设计模式基础前奏(上) 设计模式 设计模式基础前奏(下) 设计模式 创建者模式之单例模式 设计模式 创建者模式之工厂模式 设计模式 创建者模式之原 ...
- 设计模式-行为型模式-Observer 观察者模式
设计模式-行为型模式-Observer 观察者模式 1.简介 软件程序之间的解耦,减少相互之间的依赖关系,但是模块之间又是需要协同工作的: 观察者模式使得一个对象的状态发生改变的时候,已经预约的其他对 ...
- 面向对象程序设计(OOP设计模式)-行为型模式之观察者模式的应用与实现
课程名称:程序设计方法学 实验5:OOP设计模式-行为型模式的应用与实现 时间:2015年12月02日三,第3.4节地点:理 一.实验目的 加深对行为型设计模式的理解以及在开发中的实际应用能力. 二. ...
- Java设计模式——行为型模式之观察者模式
一.前言 在生活中我们会遇到这样的场景:用水壶烧开水.当水烧开时,你会有一个关火的过程.在烧水的过程中,你一直观察着这个烧水的进度,当它的状态改变时会触发你关火的这个动作.观察者模式就是处理这种场景而 ...
- C++行为型模式-实现观察者模式
一.观察者模式基本概念 1.1 观察者模式的动机 建立一个对象与对象之间的依赖关系,一个对象发生改变时,将自动通知其他对象,其他对象将相应做出反应.在此,发生改变的对象称为观察目标,被通知的对象称为观 ...
- 行为型模式-06观察者模式
文章目录 六.观察者模式 1. `定义` 2. `结构` 3. `案例` 4. `代码` 5. `优缺点` 6. `使用场景` 六.观察者模式 1. 定义 又被称为发布-订阅模式,它定义了一种一对多的 ...
- 设计模式 -行为型模式_ 观察者模式Observer Pattern 之 JDK内置的实现
文章目录 概念 Code [主题] [观察者s] 观察者一 观察者二 [测试] 源码分析 java.util.Observable 目标类 java.util.Observer 观察者接口 notif ...
- 设计模式----行为型模式之观察者模式(Observer Pattern)
下面是阅读<Head First设计模式>的笔记. 观察者模式 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. JDK API内置机制 ...
- 设计模式——行为型模式_观察者模式/发布-订阅模式
1. 类图 2. 角色 Subject:被观察者,抽象类 ConcreteSubject:被观察者的具体类,每个具体类中有列表记录任意数量的观察者 Observer:观察者接口 ConcrereObs ...
最新文章
- linux命令telnet
- 重构之SqlHelper
- How to use Chrome HAR save HTTP performance
- 陌上花开 HYSBZ - 3262 (CDQ分治)
- esp32 怎么分配freertos 堆栈大小_深度解剖~ FreeRtos阅读笔记2 任务创建、内核链表初始化...
- matlab表达式部分项求和,matlab如何得到符号表达式中某一部分项的系数
- 将一个数组拼接成一个指定字符串返回
- bzoj1041 [HAOI2008]圆上的整点 gcd
- 印花材料使用过程中的三个常见问题及解决方案
- Asp.Net中的正则表达式问题可以在此提问,今后大家一起研究!贴出基本语法参考...
- ORB-SLAM:一种通用的(全能的)精确的单目SLAM系统(ORB-SLAM论文翻译)
- win11官网的预览版系统如何下载安装
- 如何解读springboot 中约定大于配置、JPA是什么、咋用
- ES集群状态检查报错:master_not_discovered_exception 503错误
- 查找计算机缓存文件,Win7系统怎么查找IE浏览器缓存文件夹路径
- word中“项目符号”和后面的文字间隔太远
- 2个 windows 下的网络测试工具
- oVirt管理端高可用模式搭建(hosted-engine)
- 如何进行app性能测试,app性能测试应关注的测试点
- Linux下编译安装python