Java观察者模式详解
观察者模式(又称为模型(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观察者模式详解相关推荐
- 常见的java设计模式详解
常见的java设计模式详解 1. 根据目的来分 2 GoF的23种设计模式的功能 3.下面介绍几种常见的模式 单例(Singleton)模式 前言 1)单例(Singleton)模式的定义 2)特点 ...
- Apache Thrift - java开发详解
2019独角兽企业重金招聘Python工程师标准>>> Apache Thrift - java开发详解 博客分类: java 架构 中间件 1.添加依赖 jar <depen ...
- Java泛型详解-史上讲解最详细的,没有之一
目录 1. 概述 2. 一个栗子 3. 特性 4. 泛型的使用 4.1 泛型类 4.2 泛型接口 4.3 泛型通配符 4.4 泛型方法 4.4.1 泛型方法的基本用法 4.4.2 类中的泛型方法 4. ...
- Java虚拟机详解----JVM常见问题总结
[正文] 声明:本文只是做一个总结,有关jvm的详细知识可以参考本人之前的系列文章,尤其是那篇:Java虚拟机详解04----GC算法和种类.那篇文章和本文是面试时的重点. 面试必问关键词:JVM垃圾 ...
- java 泛型详解、Java中的泛型方法、 java泛型详解
本文参考java 泛型详解.Java中的泛型方法. java泛型详解 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用. 什么是泛型?为什么要使用泛型? 泛型,即& ...
- 最详细的java泛型详解
来源:最详细的java泛型详解 对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下. 本文参考java 泛型详解.Java中的泛型方法. ja ...
- Java异常详解及如何处理
来源:Java异常详解及如何处理 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言 ...
- Java基础——Java NIO详解(一)
一.基本概念 1.I/0简介 I/O即输入输出,是计算机与外界世界的一个借口.IO操作的实际主题是操作系统.在java编程中,一般使用流的方式来处理IO,所有的IO都被视作是单个字节的移动,通过str ...
- Java基础——Java NIO详解(二)
一.简介 在我的上一篇文章Java NIO详解(一)中介绍了关于标准输入输出NIO相关知识, 本篇将重点介绍基于网络编程NIO(异步IO). 二.异步IO 异步 I/O 是一种没有阻塞地读写数据的方法 ...
- Java基础——Java IO详解
一.概述 1.Java IO Java IO即Java 输入输出系统.不管我们编写何种应用,都难免和各种输入输出相关的媒介打交道,其实和媒介进行IO的过程是十分复杂的,这要考虑的因素特别多,比如我们要 ...
最新文章
- 配置Apache 2.2+PHP 5.2.9支持OCI通过Oracle9i Client连接Oracle
- numpy.sum详解
- 射影几何3:拓广平面
- Win10怎么设置虚拟内存?
- Chrome一直提示“adobe flash player 因过期而遭阻止” ,如何解决?
- 二十八、PHP框架Laravel学习笔记——模型的关联查询
- mysql8.0.20 64位安装教程_MySQL8.0.20压缩版本安装教程图文详解
- java字节输出流方法,Java-IO:File和字节输入输出流
- linux系统数据文件和信息--unix环境高级编程读书笔记
- JAVA基础【刘意】27天全集【Day02小结】
- Java实现腾讯云发送短信
- 后盾网mysql_后盾网MySQL数据库视频图文详细教程资源推荐
- PS CS6增加导出ICO图标文件(ICOFormat64.8bi)64位系统
- 我的世界服务器自定义怪物怎么用,我的世界自定义怪物插件
- 小白也能轻松上手的Prometheus教程
- Navicat Premium 历史版本下载地址(官方)
- 【强化学习PPO算法】
- 【Mac 教程系列第 4 篇】如何在 Mac 上快速打出苹果的 Logo 符号
- 游戏公司的越冬样本:出海和精品化成为新的增长点?
- 通用汽车投资20亿美元增加电动汽车产量;名创优品在巴黎开设首家门店 | 美通企业日报