Java实现观察者模式

观察者模式,简单来说就是一对多的依赖,并且把观察者和被观察者对象分开松耦合

当某个对象的状态发生更新时,所有依赖的观察者都会收到更新,而断掉依赖的则不在收到

代码实现:

主题:售楼处的某位员工向有兴趣的用户群发房源降价的消息

1、创建观察者接口Observer

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

2、创建被观察者接口

public interface Subject {//被观察者的接口:注册、取消注册、观察通知void reg(Observer obs);void unreg(Observer obs);void sendMessage(String msg);
}

3、被观察者的实现类

public class Building implements  Subject {List<Observer> obses = new ArrayList<Observer>();//注册@Overridepublic void reg(Observer obs) {obses.add(obs);}//取消注册 拉黑@Overridepublic void unreg(Observer obs) {if (!obses.isEmpty()&&obses.contains(obs)){obses.remove(obs);}}//发消息,群发@Overridepublic void sendMessage(String msg) {for (Observer obs : obses) {obs.update("某个售楼处的小姐姐:"+msg);}}
}

4、观察者的实现类

public class Yourself implements Observer{private String yourName;public Yourself(String yourName) {this.yourName = yourName;}@Overridepublic void update(String msg) {System.out.println(yourName+"接到"+msg);}
}

5、main方法

public class App {public static void main(String[] args) {//创建一个售楼处的小姐姐(生产者)Subject sister = new Building();//创建3个观察者(消费者)Observer ys1 = new Yourself("张三");Observer ys2 = new Yourself("李四");Observer ys3 = new Yourself("王五");//去售楼处加小姐姐的微信sister.reg(ys1);sister.reg(ys2);sister.reg(ys3);//某天李四通知小姐姐取消订阅,说我不看了别发我了sister.unreg(ys2);//楼盘价格降了,售楼处的小姐姐通过加的微信通知观察者sister.sendMessage("楼房价格降低了");}
}

6、输出

可以看到李四取消订阅后,已经收不到消息了

“楼房价格降低了”);

}

}


6、输出可以看到李四取消订阅后,已经收不到消息了[外链图片转存中...(img-aH8ede5k-1616731575003)]

Java实现观察者模式相关推荐

  1. java设计模式--观察者模式(Observer)

    java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...

  2. Java设计模式-观察者模式(订阅发布模式)

    Java设计模式-观察者模式(订阅发布模式) 一起来看 会了就当复习丫,不会来一起来看看吧. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 如果你也喜欢,让我们一起坚持吧!! ...

  3. java的观察者模式

    Java里面的观察者模式,是一个非常经典的模式,经常在开发中被用到,掌握了这个思想,我相信对于一些开发,受益是匪浅的:鄙人也是觉得比较不错,所以发表一点自己的总结,如果对还处于迷茫的你有稍微的帮助的话 ...

  4. 设计模式总结(Java)—— 观察者模式

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

  5. java设计模式 观察者模式_理解java设计模式之观察者模式

    在生活实际中,我们经常会遇到关注一个事物数据变化的情况,例如生活中的温度记录仪,当温度变化时,我们观察它温度变化的曲线,温度记录日志等.对于这一类问题,很接近java设计模式里面的"观察者模 ...

  6. java设计模式---观察者模式

    观察者模式 Observer 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象. 这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己. 观察者模式 ...

  7. java jdk 观察者模式_java观察者模式实现和java观察者模式演化

    简单的观察者模式实现 import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; impo ...

  8. JAVA 设计模式 观察者模式

    用途 观察者模式 (Observer) 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象. 这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 观 ...

  9. java设计模式观察者模式吗_Java设计模式之观察者模式原理与用法详解

    Java设计模式之观察者模式原理与用法详解 本文实例讲述了Java设计模式之观察者模式原理与用法.分享给大家供大家参考,具体如下: 什么是观察者模式 可以这么理解: 观察者模式定义了一种一对多的依赖关 ...

  10. JAVA设计模式-观察者模式(Observe)

    观察者模式 其实就是一个发布者和订阅者之间的关系 如果订阅者订阅了发布者,那么发布者发布一条消息,订阅者就会立马知道. 中间的关系也就是订阅者需要去订阅消息(也就是,发布者的通知资源池子(也就是存储订 ...

最新文章

  1. PYTHON编程导论群问题汇总(四)
  2. 将 Hadoop YARN 发扬广大
  3. python就业方向及工资-Python的就业的方向和前景
  4. java环境安装之不能安装exe文件
  5. jqplot学习笔记
  6. 怎么求导来着?别费劲了,试试这个Python的通用求导法
  7. UICollectionView reloadData后cell被隐藏
  8. mysql 用source 导入数据库报错
  9. POJ3068 Shortest pair of paths 【费用流】
  10. [POJ3233] Matrix Power Series(矩阵快速幂)
  11. excel怎么设置自动计算_机械设计工程师辅助计算Excel表格,自动进行选型计算...
  12. 基于Java毕业设计在线商城系统源码+系统+mysql+lw文档+部署软件
  13. 第三方支付业务流程介绍
  14. B - Learning Languages
  15. Hexo系列(四) NexT主题配置
  16. MATLAB:零状态响应(lsim(连续);filter(离散))、冲激响应(impulse或impz)和阶跃响应(step)、卷积(conv)
  17. HttpClient解析服务器返回的response出现乱码
  18. 可以插卡的ipad_请问苹果的iPad那几款是能无线也能插卡的
  19. app小程序手机端Python爬虫实战01-Uiautomator2自动化抓取工具介绍
  20. POJ 2924 Gauß in Elementary School(简单题)

热门文章

  1. python写一个地球同步卫星图动态壁纸(第一部分)
  2. COMSOL35a下载地址
  3. QQxml和json代码生成卡片的方法
  4. 8- 性能测试面试题(测试框架总结)史上最全面试题
  5. [A3C]:Tensorflow代码实现详解
  6. 固态硬盘分为哪几种_固态硬盘接口类型有哪些? 固态硬盘接口类型图解
  7. 光谱共焦位移传感器原理和特性
  8. Java数字转换大写
  9. 传统io和NIO详细比较
  10. 工作计划表怎么做?30份Excel工作计划表模板,职场人必备,可套用