观察者模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。

观察者模式存在一个控制主体,和许多的观察者,当控制主体状态改变时,所有观察者也都会做出反应。

观察者模式的实现;

1. 创建观察者抽象类

//抽象观察者
public abstract class Observer {public abstract void update();
}

2. 创建三个具体观察者

//观察者A
public class AObserver extends Observer {@Overridepublic void update() {System.out.println("观察者A做出反应");}
}
//观察者B
public class BObserver extends Observer {@Overridepublic void update() {System.out.println("观察者B做出反应");}
}
//观察者A
public class CObserver extends Observer {@Overridepublic void update() {System.out.println("观察者C做出反应");}
}

3. 创建控制主体

public class Subject {private List<Observer> observers = new ArrayList<>();private String state;public String getState() {return state;}public void setState(String state) {this.state = state;notifyAllObservers();}public void add(Observer observer){observers.add(observer);}public void notifyAllObservers(){for(Observer observer:observers){observer.update();}}
}

观察者模式测试

public class VisitorMain {public static void main(String[] args) {Subject subject = new Subject();subject.add(new AObserver());subject.add(new BObserver());subject.add(new CObserver());System.out.println("主体状态改变");subject.setState("change");}
}

  • 什么是设计模式:【每天一个java设计模式(零)】 - 设计模式基本概念及七大设计原则

创建型模式

  • 工厂模式:【每天一个java设计模式(一)】 - 工厂模式
  • 抽象工厂模式: 【每天一个java设计模式(二)】 - 抽象工厂模式
  • 单例模式:【每天一个java设计模式(三)】 - 单例模式
  • 原型模式:【每天一个java设计模式(四)】 - 原型模式
  • 建造者模式: 【每天一个java设计模式(五)】 - 建造者模式

结构型模型

  • 适配器模式 : 【每天一个java设计模式(六)】 - 适配器模式
  • 代理模式: 【每天一个java设计模式(七)】 - 代理模式模式
  • 桥接模式:【每天一个java设计模式(八)】 - 桥接模式
  • 装饰器模式:【每天一个java设计模式(九)】 - 装饰器模式
  • 外观模式:【每天一个java设计模式(十)】 - 外观模式
  • 享元模式:【每天一个java设计模式(十一)】 - 享元模式
  • 组合模式:【每天一个java设计模式(十二)】 - 组合模式

行为型模式

  • 模板模式:【每天一个java设计模式(十三)】 - 模板模式
  • 解释器模式:【每天一个java设计模式(十四)】 - 解释器模式
  • 命令模式:【每天一个java设计模式(十五)】 - 命令模式
  • 策略模式:【每天一个java设计模式(十六)】 - 策略模式
  • 状态模式:【每天一个java设计模式(十七)】 - 状态模式

下一节:
责任链模式:【每天一个java设计模式(十九)】 - 责任链模式

【每天一个java设计模式(十八)】 - 观察者模式相关推荐

  1. Java设计模式(十八):享元设计模式

    1. 应用场景 当我们项目中创建很多对象,而且这些对象存在许多相同模块,这时,我们可以将这些相同的模块提取出来采用享元模式生成单一对象,再使用这个对象与之前的诸多对象进行配合使用,这样无疑会节省很多空 ...

  2. 【每天一个java设计模式(十五)】 - 命令模式

    命令模式是一种数据驱动的设计模式,它属于行为型模式.请求以命令的形式包裹在对象中,并传给调用对象.调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令. 命令模式也就是一个 ...

  3. 【每天一个java设计模式(十四)】 - 解释器模式

    解释器模式提供了评估语言的语法或表达式的方式,它属于行为型模式.这种模式实现了一个表达式接口,该接口解释一个特定的上下文. 解释器模式主要包括以下几个部分: 抽象表达式角色:定义解释器的接口,约定解释 ...

  4. 【每天一个java设计模式(完)】 - 四万字实现23种设计模式(附示例源码)

    什么是设计模式:[每天一个java设计模式(零)] - 设计模式基本概念及七大设计原则 创建型模式 工厂模式:[每天一个java设计模式(一)] - 工厂模式 抽象工厂模式: [每天一个java设计模 ...

  5. 【每天一个java设计模式(十七)】 - 状态模式

    在状态模式中,类的行为是基于它的状态改变的,允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类.这种类型的设计模式属于行为型模式. 在状态模式中,我们创建表示各种状态的对象和一个行为 ...

  6. 【每天一个java设计模式(二十三)】 - 访问者模式

    在访问者模式中,我们使用了一个访问者类,它改变了元素类的执行算法.通过这种方式,元素的执行算法可以随着访问者改变而改变.这种类型的设计模式属于行为型模式.根据模式,元素对象已接受访问者对象,这样访问者 ...

  7. 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)

    设计模式 ( 十五 ) 观察者模式Observer(对象行为型) 1.概述 一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力.当对象们连接在一起时,它们就可以相互提供服务和信息. 通常来 ...

  8. 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)

    设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也经常遇到类似的情况,实现某一个功能有多种算法或者策略,我们能够依据环境或者条件的不同选择不同的算法或者策略来完毕 ...

  9. 小白学JAVA之十八——泛型

    小白学JAVA之十八--泛型 一. 基本概念 通常情况下集合中可以存放不同类型的对象,是因为将所有对象都看做Object类型放入的,因此从集合中取出元素时也是Object类型,为了表达该元素真实的数据 ...

最新文章

  1. 解决Transformer固有缺陷:复旦大学等提出线性复杂度SOFT
  2. 巨蟒python全栈开发-第10天 函数进阶
  3. STM32 PWM输出实验
  4. mysql 包 过程 job_mysql job实例全过程
  5. 基于easyui开发Web版Activiti流程定制器详解(六)——Draw2d的扩展(一)
  6. 多线程和线程池的基本知识总结
  7. Registry学习资料
  8. Atitit 各种设计图纸分类 目录 1. Atitit 常见软件设计图纸总结 2 1.1. Uml系列图纸 2 1.2. Er图 req需求图 2 1.3. Parametric diagr
  9. 【应用推荐】优效文件助手 everything的完美替代方案,更美观,更高效,更强大。
  10. feed机制、fetch机制
  11. 10.自动代理AutoProxy
  12. 华为鸿蒙与小米新系统,华为鸿蒙系统硬刚谷歌!小米也发布新系统:却选择和谷歌系统互补...
  13. 大数据破危险品物流难题 危化品污染有望“圈治”
  14. Python ln_LN型芯型联轴器
  15. java二维数组添加数据_我敢保证,全网没有再比这更详细的Java知识点总结了,送你啊...
  16. 计算机游戏翻译,百度翻译电脑版
  17. Chrome浏览器设置网站前自动加https
  18. 如何排查网络丢包问题
  19. arduinouno组装无人机_Arduino UNO四自由度机械臂制作
  20. bat 自动执行 SVN 命令

热门文章

  1. 轻舟程序创建的centos7.x磁盘合并到根的操作方法
  2. 51单片机驱动HMI串口屏,串口屏的下载方式
  3. 基于PID的直流电机调速控制系统
  4. 【毕业设计】基于stm32的迷你示波器 - 单片机 嵌入式 物联网
  5. Matlab 中 global 全局变量用法
  6. Java类和对象知识点的整理
  7. Hive任务实施(航空公司客户价值数据)
  8. 【LabVIEW FPGA图形化】 ngc、edf网表文件的编写:LED流水灯
  9. Spotify登陆韩国
  10. php连接不同编码oracle,PHP连接Oracle出现中文乱码问题