观察者模式(又称为模型(Model)-视图(View)模式、源-收听者(Listener)模式)

观察者模式定义

Java观察者模式定义 :对象间一对多的依赖关系,当一个对象(被观察者)的状态发生改变时,所有依赖于它的对象(观察者)都得到通知并自动更新。举个例子:用户界面(view层)可以作为一个观察者,seriver层是被观察者,当观察者观察到一则数据时,view层得到数据并产生相应处理。再比如,生活中订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。

观察模式的核心:

一.被观察者实现以下两步(非常重要):

1.定义一个抽象被观察者接口(Observerabel):里面至少有addObserver方法removeObserver方法notify方法。

2.一个具体的类实现被观察者接口(seriver):比如订阅模式中发布者。当发布者得到信息要发送是,要用notify方法给所有的订阅者通知。

二.观察者实现以下两步:

1.定义一个观察者接口(Observer):里面有update方法。

2.一个类实现观察者接口 (view):比如订阅模式中订阅者,当发布者发布消息,当前订阅者(自己)可以收到消息。

观察者模式具体实现

上述讲了观察者模式的两个核心,下面小编来实现它

首先完成两个接口。也可以定义成抽象类

package com.util.test;public interface Observerable {//添加观察者,参数需要一个实现了观察者接口的类!!!void addObserver(Observer observer);//删除观察者,参数需要一个实现了观察者的接口的类!!!void removeObserver(Observer observer);//向所有的观察者发送数据void notify(String info);
}
package com.util.test;public interface Observer {//更新数据public void update(String info);
}

有了这两个接口,我们定义两个类实现它

package com.util.test;import java.util.ArrayList;
import java.util.List;public class Seriver implements Observerable {//定一个观察者listprivate List<Observer> list;public Seriver() {list = new ArrayList<>();}//定义一个addion方法,当遇到需要发布的内容,调运notify方法public void dealAction(String message) {if(message.contains("新年快乐")) {notify(message);}}@Overridepublic void addObserver(Observer observer) {if(!list.contains(observer)) {list.add(observer);}       }@Overridepublic void removeObserver(Observer observer) {if(!list.isEmpty() && list.contains(observer)) {list.remove(observer);} }@Override//向所有观察者发送消息public void notify(String info) {for(Observer observer : list) {observer.update(info);}    }}

public class View implements Observer {public View() {}@Overridepublic void update(String info) {System.out.println(" 收到seriver的推送消息: " + info);}}

 展示应用

package com.util.test;public class test {public static void main(String[] args) {Seriver seriver = new Seriver();View view = new View();seriver.addObserver(view);//给一个动作让处理seriver.dealAction("祝大家新年快乐");}
}

简单的应用观察者模式展示到此,或许你懂了,但是不太会用,当你处理某一个让你头大的编程难题时。

突然发现监听者模式巧妙的解决了它。你一定会感受到它的巧妙。

Java观察者模式详解相关推荐

  1. 常见的java设计模式详解

    常见的java设计模式详解 1. 根据目的来分 2 GoF的23种设计模式的功能 3.下面介绍几种常见的模式 单例(Singleton)模式 前言 1)单例(Singleton)模式的定义 2)特点 ...

  2. Apache Thrift - java开发详解

    2019独角兽企业重金招聘Python工程师标准>>> Apache Thrift - java开发详解 博客分类: java 架构 中间件 1.添加依赖 jar <depen ...

  3. Java泛型详解-史上讲解最详细的,没有之一

    目录 1. 概述 2. 一个栗子 3. 特性 4. 泛型的使用 4.1 泛型类 4.2 泛型接口 4.3 泛型通配符 4.4 泛型方法 4.4.1 泛型方法的基本用法 4.4.2 类中的泛型方法 4. ...

  4. Java虚拟机详解----JVM常见问题总结

    [正文] 声明:本文只是做一个总结,有关jvm的详细知识可以参考本人之前的系列文章,尤其是那篇:Java虚拟机详解04----GC算法和种类.那篇文章和本文是面试时的重点. 面试必问关键词:JVM垃圾 ...

  5. java 泛型详解、Java中的泛型方法、 java泛型详解

    本文参考java 泛型详解.Java中的泛型方法. java泛型详解 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用. 什么是泛型?为什么要使用泛型? 泛型,即& ...

  6. 最详细的java泛型详解

    来源:最详细的java泛型详解 对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下. 本文参考java 泛型详解.Java中的泛型方法. ja ...

  7. Java异常详解及如何处理

    来源:Java异常详解及如何处理 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言 ...

  8. Java基础——Java NIO详解(一)

    一.基本概念 1.I/0简介 I/O即输入输出,是计算机与外界世界的一个借口.IO操作的实际主题是操作系统.在java编程中,一般使用流的方式来处理IO,所有的IO都被视作是单个字节的移动,通过str ...

  9. Java基础——Java NIO详解(二)

    一.简介 在我的上一篇文章Java NIO详解(一)中介绍了关于标准输入输出NIO相关知识, 本篇将重点介绍基于网络编程NIO(异步IO). 二.异步IO 异步 I/O 是一种没有阻塞地读写数据的方法 ...

  10. Java基础——Java IO详解

    一.概述 1.Java IO Java IO即Java 输入输出系统.不管我们编写何种应用,都难免和各种输入输出相关的媒介打交道,其实和媒介进行IO的过程是十分复杂的,这要考虑的因素特别多,比如我们要 ...

最新文章

  1. 配置Apache 2.2+PHP 5.2.9支持OCI通过Oracle9i Client连接Oracle
  2. numpy.sum详解
  3. 射影几何3:拓广平面
  4. Win10怎么设置虚拟内存?
  5. Chrome一直提示“adobe flash player 因过期而遭阻止” ,如何解决?
  6. 二十八、PHP框架Laravel学习笔记——模型的关联查询
  7. mysql8.0.20 64位安装教程_MySQL8.0.20压缩版本安装教程图文详解
  8. java字节输出流方法,Java-IO:File和字节输入输出流
  9. linux系统数据文件和信息--unix环境高级编程读书笔记
  10. JAVA基础【刘意】27天全集【Day02小结】
  11. Java实现腾讯云发送短信
  12. 后盾网mysql_后盾网MySQL数据库视频图文详细教程资源推荐
  13. PS CS6增加导出ICO图标文件(ICOFormat64.8bi)64位系统
  14. 我的世界服务器自定义怪物怎么用,我的世界自定义怪物插件
  15. 小白也能轻松上手的Prometheus教程
  16. Navicat Premium 历史版本下载地址(官方)
  17. 【强化学习PPO算法】
  18. 【Mac 教程系列第 4 篇】如何在 Mac 上快速打出苹果的 Logo 符号 
  19. 游戏公司的越冬样本:出海和精品化成为新的增长点?
  20. 通用汽车投资20亿美元增加电动汽车产量;名创优品在巴黎开设首家门店 | 美通企业日报

热门文章

  1. 百度旋转验证码打码模块,集成鱼刺模块类
  2. baiduexporter+Aria在Chrome最新版上的尝试(2020.07)
  3. CentOS 7安装MinDoc文档系统
  4. Installation for COMSOl(安装COMSOL)
  5. OSI网络七层协议详解
  6. 计算机网络笔记 韩立刚(物理层+数据链路层+网络层+传输层已完成)
  7. 误用分区助手的沉痛教训
  8. RGB565常见颜色对照表
  9. 计算机与仪表通讯实例,MODBUS称重仪表与西门子PLC通讯实例
  10. Jmeter使用csv文件读取测试数据