设计模式_Observable与Observer
一.基本概念
java.util.Observable 被观察者类,需要继承这个类
java.util.Observer 观察者类,需要实现这个接口中的update()方法
二.举例 Door2
属性 name 和status 改变,被监管
1.Door2
import java.util.Observable; //被监管对象
public class Door2 extends Observable {
private String state = "";
private String name = ""; public void setState(String newValue) {
if (state != newValue) {
this.state = newValue;
// 标记此 Observable对象为已改变的对象
setChanged();
// 通知所有观察者
notifyObservers("state");
}
} public void setName(String newValue) {
if (name != newValue) {
this.name = newValue;
// 标记此 Observable对象为已改变的对象
setChanged();
// 通知所有观察者
notifyObservers("name");
}
}
//////////////////////////////////////////
public String getName() {
return name;
} public String getState() {
return state;
}
}
2.被监管对象
Door2StateObserver
import java.util.Observable;
import java.util.Observer; public class Door2StateObserver implements Observer { @Override
public void update(Observable o, Object arg) {
Door2 door2 = (Door2) o;
if (!arg.toString().equalsIgnoreCase("state")) {
return;
}
switch (door2.getState()) { // 使用Java 7的switch语句对string的判断支持
case "open":
System.out.println("门打开");
break;
case "close":
System.out.println("门关闭");
break;
}
}
}
Door2NameObserver
import java.util.Observable;
import java.util.Observer; public class Door2NameObserver implements Observer { @Override
public void update(Observable o, Object arg) {
Door2 door2 = (Door2) o;
if (!arg.toString().equalsIgnoreCase("name")) {
return;
}
System.out.println("I got a new name,named \"" + door2.getName() + "\"");
}
}
3.Door2Test
public class Door2Test {
public static void main(String[] args) {
Door2 door = new Door2();
Observer stateListener = new Door2StateObserver();
door.addObserver(stateListener);
// 开门
door.setState("open");
System.out.println("我已经进来了");
// 关门
door.setState("close");
//
Observer nameListener = new Door2NameObserver();
door.addObserver(nameListener);
door.setName("dengzy");
}
}
设计模式_Observable与Observer的更多相关文章
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
原文:乐在其中设计模式(C#) - 观察者模式(Observer Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 观察者模式(Observer Pattern) 作者:weba ...
- 8.5 GOF设计模式四: 观察者模式Observer
GOF设计模式四: 观察者模式Observer 现实中遇到的问题 当有许多不同的客户都对同一数据源感兴趣,对相同的数据有不同的处理方式,该如 何解决?5.1 定义: 观察者模式 观察者模式 ...
- java设计模式解析(1) Observer观察者模式
设计模式系列文章 java设计模式解析(1) Observer观察者模式 java设计模式解析(2) Proxy代理模式 java设计模式解析(3) Factory工厂模式 java设计模式解析( ...
- 深入浅出设计模式——观察者模式(Observer Pattern)
模式动机 建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应.在此,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而 ...
- c++ 设计模式5 (Observer / Event 观察者模式)
3.3 观察者模式 (Observer)/发布-订阅模式 动机: 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系”——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都能得 ...
- [设计模式] 19 观察者模式 Observer Pattern
在GOF的<设计模式:可复用面向对象软件的基础>一书中对观察者模式是这样说的:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.当一个 ...
- Java设计模式模式观测(Observer Pattern)
Observer Pattern 设计模式通常用于.这是一个事件侦听器模型. 该模型有两个作用,一个是Subject, 有一个Observer.Subject 保存多个Observer参考,一旦一个特 ...
- 设计模式之观察者(OBSERVER)模式
定义 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. Observer模式描述了如何建立这种关系.这一模式中的关键对象是目标(subject ...
- c#设计模式之观察者模式(Observer Pattern)
场景出发 一个月高风黑的晚上,突然传来了尖锐的猫叫,宁静被彻底打破,狗开始吠了,大人醒了,婴儿哭了,小偷跑了 这个过程,如果用面向对象语言来描述,简单莫过于下: public class Cat { ...
随机推荐
- 事件click,bind,click
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- 万里长征第二步——django个人博客(第六步 ——添加富文本编辑器)
下载kindeditor 在admin.py文件中配置链接 class Media: js = ( '/static/js/kindeditor-4.1.10/kindeditor-min.js', ...
- maven的几个重要配置文件pom.xml、settings.xml;Maven打包生成包含所有依赖的jar包
一个java项目通过maven自动下载依赖时,会涉级读取三个配置文件,分别是项目下的pom.xml 文件 .用户家目录下的.m2/settings.xml 与 maven 全局配置settings.x ...
- acle联机日志文件的维护
1.刷新重做日志缓存的时机 a.commit b.缓存满了 c.checkpoint,checkpoint的触发有两种机制: 定时触发,由log_checkpoint_interval[1]参数决定间 ...
- TensorFlow进阶(一)----张量的阶和数据类型
张量的阶和数据类型 TensorFlow用张量这种数据结构来表示所有的数据.你可以把一个张量想象成一个n维的数组或列表.一个张量有一个静态类型和动态类型的维数.张量可以在图中的节点之间流通.其实张量更 ...
- Spring框架学习(3)spring中使用jdbc
内容源自:spring中使用jdbc spring dao层中对jdbc进行了封装,使用模板模式的设计模式,通过ioc被动注入的方式将jdbcTemplate这个模板类注入到数据对象中,进行数据库操作 ...
- js 倒计时跳转页面
<script type="text/javascript">var i = 5; var intervalid; intervalid = setInterval(& ...
- SQL Server 2008 R2 清空数据库中ldf日志文件
/************************************************************ * Sql Server 2008 R2 清空数据库中ldf日志文件 * 将 ...
- 安装kubernetes dashboard
一.kubernetes dashboard kubernetes dashboard是k8s的web管理界面 二.安装 k8s的版本为1.5 1.创建dashboard-controller.yam ...
- Gradle在Android中的基本使用
1.基本概念 程序开发作为一种工程作业,不光是编写代码,还涉及到工程的各种管理(依赖,打包,部署,发布,各种渠道的差异管理.....).很多时候,我们反复的build,clean,签名,打包,发布,那 ...