java observer_Java观察者模式(Observer)
一、定义
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,让他们能够自动更新自己。主要应用在java的AWT事件机制。
二、角色
抽象主题角色(Subject):把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类或接口来实现。
具体主题角色(RealSubject):在具体主题内部状态改变时,给所有登记过的观察者发出通知。具体主题角色通常用一个子类实现。
抽象观察者角色(Observer):为所有具体的观察者定义一个接口,在得到主题的通知时更新自己。
具体观察者角色(RealObserver):该角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调。如果需要,具体观察者角色可以保存一个指向具体主题角色的引用,通常用一个子类实现。
三、代码演示
抽象观察者角色(Observer)
/**
* 抽象观察者角色
* @author zhangkang
*
*/
public interface MyObserver {
void update(String message,String subjectName);
}
具体观察者角色1(RealObserver1)
/**
* 具体观察者1
* @author zhangkang
*
*/
public class RealObserver1 implements MyObserver{
private String name;
public RealObserver1(String name) {
this.name = name;
}
@Override
public void update(String message, String subjectName) {
System.out.println(name + ":【我收到了来自" + subjectName + "的信息,信息内容为:" + message + "】");
}
}
具体观察者角色2(RealObserver2)
/**
* 具体观察者2
* @author zhangkang
*
*/
public class RealObserver2 implements MyObserver{
private String name;
public RealObserver2(String name) {
this.name = name;
}
@Override
public void update(String message, String subjectName) {
System.out.println(name + ":【我收到了来自" + subjectName + "的信息,信息内容为:" + message + "】");
}
}
抽象主题角色(Subject)
/**
* 抽象主题角色
* @author zhangkang
*
*/
public interface MySubject {
void addObserver(MyObserver o); //添加观察者
void deleteObserver(MyObserver o); //删除观察者
void notifyObservers(String message); //通知所有的观察者
}
具体主题角色(RealSubject)
import java.util.ArrayList;
import java.util.List;
/**
* 具体主题
* @author zhangkang
*
*/
public class RealSubject implements MySubject{
private String subjectName = "官方"; //主题名称
private List list; //集合用来保存每个观察者
public RealSubject() {
list = new ArrayList();
}
@Override
public void addObserver(MyObserver o) {
list.add(o);
}
@Override
public void deleteObserver(MyObserver o) {
list.remove(o);
}
@Override
public void notifyObservers(String message) {
for (MyObserver myObserver : list) {
myObserver.update(message, subjectName);
}
}
}
客户端测试
/**
* 客户端测试
* @author zhangkang
*
*/
public class Test {
public static void main(String[] args) {
//定义两个观察者
MyObserver o1 = new RealObserver1("段友1");
MyObserver o2 = new RealObserver2("段友2");
//定义一个主题
MySubject subject = new RealSubject();
//添加观察者
subject.addObserver(o1);
subject.addObserver(o2);
//发布消息通知观察者
subject.notifyObservers("内涵段子TV已下架!");
}
}
输出:
段友1:【我收到了来自官方的信息,信息内容为:内涵段子TV已下架!】
段友2:【我收到了来自官方的信息,信息内容为:内涵段子TV已下架!】
java observer_Java观察者模式(Observer)相关推荐
- java设计模式--观察者模式(Observer)
java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...
- Java设计模式—观察者模式(Observer pattern)
故事: 小雪是一个非常漂亮的女孩,漂亮的女孩总是有很多的追求者,而且追求者的队伍在不断的变动,随时有人进入这个队伍,也有人退出.男孩们追求女孩时总是表现出120%的关心,当小雪私自游玩时总是不断收到追 ...
- 设计模式 - 观察者模式(Observer Pattern) Java内置 用法
观察者模式(Observer Pattern) Java内置 用法 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26601659 ...
- 设计模式-观察者模式(Observer)-Java
设计模式-观察者模式(Observer)-Java 目录 文章目录 1.前言 2.示例案例-多人联机对战游戏的设计 3.观察者模式概述 3.1.观察者模式定义 3.2.观察者模式结构 3.3.观察者模 ...
- 设计模式:观察者模式--Observer
一.什么是观察者模式 1.生活中的观察者模式 1.警察抓小偷 在现实生活中,警察抓小偷是一个典型的观察者模式「这以一个惯犯在街道逛街然后被抓为例子」,这里小偷就是被观察者,各个干警就是观察者,干警时时 ...
- 设计模式总结(Java)—— 观察者模式
概述 它用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应.在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多 ...
- java设计模式---观察者模式
观察者模式 Observer 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象. 这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己. 观察者模式 ...
- 观察者模式 Observer 发布订阅模式 源 监听 行为型 设计模式(二十三)
观察者模式 Observer 意图 定义对象一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖他的对象都得到通知并自动更新. 别名:依赖(Dependents),发布订阅(Publish-Su ...
- 观察者模式(Observer) 简介
一, 观察者模式(Observer) 的定义 观察者模式: 定义了一种 1对多 的依赖关系, 让多个观察者对象同时监听1个主题对象. 这个主题对象在状态发生变化时, 会通知所有的观察者对象, 使它 ...
最新文章
- 散列表(也叫哈希表),
- .net2.0下数据库连接字符串的使用
- 吴恩达《Machine Learning》精炼笔记 1:监督学习与非监督学习
- 又一起.NET程序挂死, 用 Windbg 抽丝剥茧式的真实案例分析
- ajax同步、异步区别及应用
- LeetCode383. Ransom Note
- 2018年7月第一周网站建站笔记
- c语言定义int 输出4386,C语言 · 矩阵乘法
- 使用Connector / Python查询MySQL数据
- AllenNLP入门笔记(一)
- dhtmlxgantt pro 7.1.10 | dhtmlxgantt 专业版 7.1.10
- LOJ10068(BZOJ1977)(Luogu4180)
- win10计算机如何切换用户名,如何修改电脑用户名,win10系统更改用户名方法
- 简单个人网页设计 静态HTML动物主题网页 DW个人网站模板 简单宠物网页作品代码 个人网页制作 个人网页Dreamweaver设计与实现
- python人物关系网络图共现_文本分析之制作网络关系图
- 自定义下拉刷新之仿AcFun下拉刷新
- 计算机毕业设计 SSM学校图书借阅管理系统 图书馆借阅管理系统 图书借阅系统Java
- linux peek,Peek - Gif 录制软件
- WooCommerce可扩展性:如何扩大您的WooCommerce商店
- 华为机试真题 Java 实现【不含 101 的数】【2022.11 Q4新题】