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

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

观察者模式的实现;

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. 迷宫问题输出超限反思
  2. 线程安全与可重入函数的区别及联系
  3. android插件化-apkplug框架基本结构-01
  4. Firefox Quantum支持跨浏览器插件架构
  5. 用Tableau画延展条形图(Extended Bar Chart)
  6. linux系统子目录至少,Linux复习题(附答案)
  7. verilog中function用法_verilog中的function用法与例子
  8. POJ 3259 Wormholes(bellman_ford,判断有没有负环回路)
  9. python class def try_python 中exception,class学习
  10. 【KDD20】主题模型在图模型中的应用专题
  11. spotify注册服务器,【评测】Cocktail Audio N25:集USB解码、TIDAL、Spotify、NAS 串流、音乐服务器于......
  12. Matlab中fprintf函数使用
  13. javascript 忽略 报错_JavaScript数据类型中易被忽略的点
  14. 中国软件,从繁荣走向文明
  15. 流畅的python 14章可迭代的对象、迭代器 和生成器
  16. 若再斗几合 瑞星杀毒软件升级包
  17. .NET WebApi调用微信接口Https请求工具类
  18. CSDN超级实习生计划——大厂实习直通车,年薪最高可达30W。2022正式开启~
  19. APP免费图片图标大全
  20. 嵌入式linux在windows,在Windows下启动Linux-嵌入式系统-与非网

热门文章

  1. CSDN换了新的logo
  2. Postman安装和运行
  3. 微信小程序 tab选项卡,可点击,可滑动
  4. 花三个月吃透京东T8推荐的178页京东基础架构建设之路,入职定T5
  5. 深入理解什么是TCP 粘包?粘包警察是什么梗?
  6. 如何使用maven给Java打包
  7. 【程序设计】Julia程序开发注意事项
  8. 单片机按键启停c语言,ZigBee-CC2530单片机 - 按键控制跑马灯的启停
  9. 【读书笔记】 玩转虚拟机基于Vmware+Windows 虚拟化技术
  10. 爬虫小试-0217影响因子表