Java设计模式--------观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同事监听一个主题对象。这个主题对象发生变化时,会通知所有观察者,使他们可以自动更新自己。

先看看下面的代码结构图,看的不怎么懂的小伙伴也没什么关系。接下来会有代码分析,看完代码再次回来看这张图思路就会清晰很多。

还是一样,观察者模式大概可以分成以下几个类:

Subject:把所有观察者的引用保存在一个聚集里,每个主题可以有任意数量的观察者。抽象主题提供可以增加或者删除观察者的接口和通知观察者的接口。

Observer:抽象观察者,为所有观察者定义接口,在得到主题对象的通知时及时更新自己。

ConcreteSubject:具体的观察者类,实现抽象观察者所要求的更新接口,以便使自身的状态与主题对象的状态相协调。

ConcreteObserver:具体的主题对象,当自身内部发生变化时给所有登记过的观察者发送通知。

敲了一大堆的废话,还是看代码的实在。

代码模拟的场景是:

员工在公司上班,老板不在时有的员工看NBA有的员工看小电影。。。。。。等。大家怕在娱乐的时候老板突然回来发现,就和前台MM说好当老板回来的时候给大家发一个通知,大家就及时回到工作状态。

就这样,很简单的。

上代码:

Subject:

package com.tian.publish_subscribe;/*** @author 作者 : TianLuhua* @version 创建时间:2016年4月16日 下午11:03:16 通知者接口,为了与观察者解耦而创建*/
abstract class Subject {// 通知者的actionprotected String acton;// 获取actionprotected String getActon() {return acton;}// 注册观察者的方法abstract void Attach(Observer observer);// 去除观察者的方法abstract void Detach(Observer observer);// 通知观察者的方法abstract String Notify();}

Observer:

package com.tian.publish_subscribe;/*** @author 作者 : TianLuhua* @version 创建时间:2016年4月16日 下午11:10:31 观察者抽象类*/
public abstract class Observer {// 观察者接到前台mm的通知调用的方法public abstract void Update();}

QianTaiMM:(这里前台MM就是具体主题类)

package com.tian.publish_subscribe;import java.util.ArrayList;
import java.util.List;/*** @author 作者 : TianLuhua* @version 创建时间:2016年4月16日 下午11:15:43 通知 者接口的实现者。*          我们模拟的场景是老板回来了前台通知开小差的员工好好工作,这里的实现者就是公司的前台mm。*/
public class QianTaiMM extends Subject {// 观察者队列private List<Observer> observers = new ArrayList<Observer>();// 通知者的actionprotected String acton;// 获取actionprotected String getActon() {return acton;}public QianTaiMM(String acton) {this.acton = acton;}// 注册观察者public void Attach(Observer observer) {if (observers != null) {observers.add(observer);}}// 取消注册public void Detach(Observer observer) {if (observers != null) {observers.remove(observer);}}// 通知观察者public String Notify() {for (Observer observer : observers) {observer.Update();}return acton;}}

NBAObserver:(这里是看NBA的员工,具体的观察者类)

package com.tian.publish_subscribe;/*** @author 作者 : TianLuhua* @version 创建时间:2016年4月16日 下午11:35:54* */
public class NBAObserver extends Observer {private String name;private Subject subject;public NBAObserver(String name, Subject subject) {super();this.name = name;this.subject = subject;}@Overridepublic void Update() {System.out.println("前台MM:" + subject.getActon());System.out.println(name + ":关闭球赛,认真工作。");}}

XiaoDianyingObserver:(这里是看xiaodianying的员工,具体的观察者类)

package com.tian.publish_subscribe;/*** @author 作者 : TianLuhua* @version 创建时间:2016年4月16日 下午11:56:38* */
public class XiaoDianyingObserver extends Observer {private String name;private Subject subject;public XiaoDianyingObserver(String name, Subject subject) {this.name = name;this.subject = subject;}@Overridepublic void Update() {System.out.println("前台MM:" + subject.getActon());System.out.println(name + ":关闭小电影,认真工作。");}}

下面就是客服端调用的代码了:

package com.tian.publish_subscribe;/*** @author 作者 : TianLuhua* @version 创建时间:2016年4月16日 下午11:58:22 客户端*/
public class Main {public static void main(String[] args) {Subject qianTaiMM = new QianTaiMM("老板回来了");qianTaiMM.Attach(new NBAObserver("小李", qianTaiMM));qianTaiMM.Attach(new XiaoDianyingObserver("小赵", qianTaiMM));qianTaiMM.Notify();}
}

打印输出:

前台MM:老板回来了
小李:关闭球赛,认真工作。
前台MM:老板回来了
小赵:关闭小电影,认真工作。

怎么样,很简单吧。自己动手去实现一遍把,好记星不如烂笔头啊。

Android中的接口回调机制,以及Button的点击事件响应机制等内部就是用的观察者模式。Button事件响应机制在注册观察者是在View类的 public void setOnClickListener(OnClickListener l)方法实现的,感兴趣的小伙伴去看看吧。

休息了。

Java设计模式--------观察者模式相关推荐

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

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

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

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

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

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

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

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

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

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

  6. Java设计模式——观察者模式

    转自:http://www.cnblogs.com/shamgod/p/4588557.html 一.概述 childe类中的是关联监听者dad的,若要再增加监听者,会很不方便,且要修改代码.好的方法 ...

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

    观察者模式介绍: 观察者模式(有时又被称为发布/订阅模式)是软件设计模式的一种.在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察者所提 ...

  8. Java设计模式——观察者模式与Spring事件监听器

    写在前面的话:终于通读了一遍<Spring源码深度解析>,在Spring的消息发布(Message)模块使用了设计模式中的观察者模式的经典实现,所以趁此机会总结一些. 1. 业务场景 Sp ...

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

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

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

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

最新文章

  1. Python相关机器学习
  2. 【数据竞赛】学特征工程就看这篇,解析IJCAI18亚军方案之特征工程
  3. Request_获取请求头数据
  4. js打开android应用程序,浏览器通过JS打开Android程序
  5. socket网络编程--epoll小结
  6. 使用CodeSmith要注意的几点
  7. (程序员版)没人能很轻松的对待工作
  8. php 合并数组 效率,PHP将两个关联数组合并函数-增高函数效率
  9. linux安装JDK环境,JDK6.0即java 1.6.0
  10. vscode svn插件使用_我最终还是选择了VS code!
  11. 如何录制Gif动态图片
  12. 常识——手机当作无线网卡,通过usb与电脑共享网络,让电脑网卡支持5g网络
  13. 硬件工程师成长之路(2)——电路设计
  14. Android Studio 升级到3.0后出现编译错误\.gradle\caches\transforms-1\files-1.1\*****-release.aar
  15. web在线播放flv视频
  16. 并发与同步、信号量与管程、生产者消费者问题
  17. blender玻璃材质
  18. docker cp传递整个目录
  19. Kafka学习笔记1
  20. 瑞萨开发记录01:点亮一颗LED灯(R5F104FEA芯片)

热门文章

  1. 基于arduino单片机的室内温度控制
  2. Easy_CHM生成CHM时出现的目录和索引中文乱码脚本错误
  3. rabbitm rpm傻瓜式安装
  4. 哪里有免费的ASP空间?
  5. 使用laravel-wechat微信支付
  6. JefferyZhao教导我们...
  7. 桌面美化:自定义桌面 Rainmeter
  8. 峰值帧+时序信息 跨数据集微表情识别
  9. 女人健身操必知的健康常识
  10. BTA12A-ASEMI高效mos管BTA12A