设计模型之观察者模型(二)
2016-04-21 11:07
239 查看
利用java自带的接口来实现观察者模式
1.目标类的定义:
2.观察者类的定义:
3.结果:
1.目标类的定义:
package com.jxufe.jdk.observer; import java.util.Observable; /** * 这是一个具体的目标对象 * @author jack * @version 创建时间:2016年4月21日 上午10:42:08 * */ public class ConcreteSubject extends Observable { private String information;//目标对象需要更新的内容 public String getInformation() { return information; } public void setInformation(String information) { this.information = information; /** * 标记此 Observable 对象为已改变的对象; * 现在 hasChanged 方法将返回 true。 */ this.setChanged(); /** * 这个方法是使用推模式实现的,通知其所有观察者 * 并调用 clearChanged 方法来指示此对象不再改变。 */ this.notifyObservers(information); /** * 拉模式是把整个目标对象推送个观察者对象的 * this.notifyObservers(); */ } }
2.观察者类的定义:
package com.jxufe.jdk.observer; import java.util.Observable; import java.util.Observer; public class ConcreteObserver implements Observer { private String observeName; /** * 第一个参数是使用拉模型来调用的 * 第二个参数是使用推模型来调用的 */ public void update(Observable arg0, Object arg1) { System.out.println("推模型:"+observeName + (String)arg1); System.out.println("拉模型:"+observeName + ((ConcreteSubject)arg0).getInformation()); } public String getObserveName() { return observeName; } public void setObserveName(String observeName) { this.observeName = observeName; } }
3.结果:
package com.jxufe.jdk.observer; import java.util.Observable; /** * 用来演示观察者模式 * @author 曾志鹏 * @version 创建时间:2016年4月21日 上午10:56:09 * */ public class MainDemo { public static void main(String[] args) { Observable concreteSubject1 = new ConcreteSubject(); ConcreteObserver observer1 = new ConcreteObserver(); ConcreteObserver observer2 = new ConcreteObserver(); observer1.setObserveName("张三"); observer2.setObserveName("张四"); concreteSubject1.addObserver(observer2); concreteSubject1.addObserver(observer1); ((ConcreteSubject) concreteSubject1).setInformation("你好"); } }
相关文章推荐
- HDU 1166 敌兵布阵 (线段树加法)
- Android Studio下的单元测试
- GMap.Net中使用高德地图
- 股票质押式回购交易和约定购回式证券交易的异同是什么?
- NEFU 1151 特殊的质数
- Spring mvc redirect跳转路径问题
- php HttpOnly
- oracle dmp 导出缺表问题
- 在Windows下如何安装Tomcat服务器搭建
- T100中sqlca各个字段的含义
- register_shutdown_function 函数详解
- iOS开发经验总结
- 一个android工程代码多个差异化项目管理方法探讨
- Fedora22下安装nvidia私有显卡驱动
- C语言中的static
- c++第四次实验
- IOS9获取HTML数据报错解决
- Selenium2 Python 自动化测试实战学习笔记(八)
- hive 与mysql 的区别 合并多列
- c++实验4-分数的累加