博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式-观察者模式
阅读量:4163 次
发布时间:2019-05-26

本文共 1526 字,大约阅读时间需要 5 分钟。

文章目录

观察者模式介绍

观察者模式也被称为发布-订阅(Publish/Subscribe)模式,它属于行为型模式的一种。观察者模式定义了一种一对多的依赖关系,一个主题对象可被多个观察者对象同时监听。当这个主题对象状态变化时,会通知所有观察者对象并作出相应处理逻辑。

模式类图

在这里插入图片描述

观察者模式定义了四种角色:抽象主题、具体主题、抽象观察者、具体观察者。

  • 抽象主题(Subject):该角色是一个抽象类或接口,定义了增加、删除、通知观察者对象的方法
  • 具体主题(ConcreteSubject):该角色继承或实现了抽象主题,定义了一个集合存入注册过的具体观察者对象,在具体主题的内部状态发生改变时,给所有注册过的观察者发送通知
  • 抽象观察者(Observer):该角色是具体观察者的抽象类,定义了一个更新方法
  • 具体观察者(ConcrereObserver):该角色是具体的观察者对象,在得到具体主题更改通知时更新自身的状态

实例代码

Java中为我提供了观察者模式的通用实现。

  • java.util.Observable:可被观察的主题,具体主题扩展它
  • java.utilObserver:观察者接口,具体观察者实现它
public class ObserverSample {
public static void main(String[] args) {
//新建一个主题对象,并且重写通知方法 Observable subject1 = new Observable() {
public synchronized void notifyObservers(Object data) {
setChanged(); super.notifyObservers(data); } }; //往主题对象中添加观察者 subject1.addObserver(new Observer() {
@Override public void update(Observable o, Object arg) {
System.out.println("观察者1收到通知被更新了..." + arg); } }); subject1.addObserver(new Observer() {
@Override public void update(Observable o, Object arg) {
System.out.println("观察者2收到通知被更新了..." + arg); } }); //发送通知,内部是同步并循环调用每一个观察者 subject1.notifyObservers("change1"); subject1.notifyObservers("change2"); }}

总结

  • 这个模式是松偶合的。改变主题或观察者中的一方,另一方不会受到影像。
  • JDK中也有自带的观察者模式。但是被观察者是一个类而不是接口,限制了它的复用能力。
  • 在JavaBean和Swing中也可以看到观察者模式的影子

转载地址:http://twpxi.baihongyu.com/

你可能感兴趣的文章
Mybatis-Plus进阶之扩展插件
查看>>
centos 7 阿里云安装ftp服务以及创建用户
查看>>
业务规范之springboot整合swagger2
查看>>
业务规范之统一验证
查看>>
业务规范之统一返回体
查看>>
业务规范之统一异常处理和统一响应
查看>>
docker安装mongodb开启权限认证以及mongodb数据定时脚本备份与恢复
查看>>
SSH免密登录,实现A服务器免密登录B服务器
查看>>
docker安装mongodb开启权限认证以及mongodb数据定时脚本备份与恢复
查看>>
linux中定时任务,定时删除某天之前的文件
查看>>
定时任务定时备份docker中mysql并将数据自动保存到另外一台服务器
查看>>
Java图形可视化工具graphviz-java
查看>>
docker中镜像的备份与迁移详细过程
查看>>
springboot2.0整合redis缓存注解
查看>>
spring中条件注解的使用 @Conditional
查看>>
Java基于JDK实现动态代理
查看>>
spring中Aware 接口 感知捕获
查看>>
maven打包spring项目缩小体积
查看>>
idea中的超实用小技巧提升编码效率
查看>>
在pom文件中指定 maven 引用下载好的jar包
查看>>