设计模式之观察者模式(Obsever)2
来源:互联网 发布:供给侧改革成效数据 编辑:程序博客网 时间:2024/04/28 08:45
不想进行文字叙述,相关叙述网上或者书上很多,可以自行查阅学习。本文只是贴一些代码,代码是最好的文字。需要说明的是,本文只是说明怎么使用JAVA提供的观察者模式。
1、最简单最好理解的使用
被观察者(主题角色)
package com.sailang.observerpattern;import java.util.Observable;public class Watched extends Observable { public void notify(String str) { setChanged(); notifyObservers(str); } }观察者
package com.sailang.observerpattern;import java.util.Observable;import java.util.Observer;public class Watcher implements Observer{ @Override public void update(Observable o, Object arg) { System.out.println("Watcher, arg = " + arg.toString()); }}客户端
package com.sailang.observerpattern;public class TestClass { public static void main(String[] args) { Watched watched = new Watched(); watched.addObserver(new Watcher()); watched.notify("勤奋是最好的品质!"); }}
2、观察者模式和单例模式的结合
package com.sailang.observerpattern;import java.util.Observable;public class Watched extends Observable { private static Watched mInstance; public static synchronized Watched getInstance() { if (mInstance == null) { mInstance = new Watched(); } return mInstance; } public void notify(String str) { setChanged(); notifyObservers(str); }}这样做,可以保证是同一个被观察者,而且,可以在复杂的环境中也可以很容易的获得这个被观察者实例。
package com.sailang.observerpattern;import java.util.Observable;import java.util.Observer;public class Watcher implements Observer { public Watcher() { Watched.getInstance().addObserver(this); } @Override public void update(Observable o, Object arg) { System.out.println("Watcher, arg = " + arg.toString()); }}在生成观察者实例时,就和被观察者发生关系,这是一种实用的编程技巧。
package com.sailang.observerpattern;public class TestClass { public static void main(String[] args) { new Watcher(); new Watcher(); new Watcher(); Watched.getInstance().notify("勤奋是最好的品质!"); }}这样写代码,是不是看的简洁又巧妙!呵呵
观察者模式是一种经常用到的一种设计模式,采用这种设计模式可以实现两个类之间的通信,我们可以这样理解,采用观察者模式,我们让TestClass和Watcher这两个对象进行了通信。
20140115(补充)
虽然采用第二种方式,在实现需求方面有很大的灵活性,但是,我们注意到mIstance是属于Water类的,也就是说Water类存在mIstance实例就一直存在。这样就会出现一个问题,mIstance addObserver进去的Observer对象就一直存在,得不到释放,一直在内存中,这是我们不愿看到的,所以我们有时需要deleteObserver。
0 0
- 设计模式之观察者模式(Obsever)
- 设计模式之观察者模式(Obsever)2
- 设计模式-----观察者模式(Obsever)
- 设计模式-----观察者模式(Obsever)
- 设计模式——观察者模式 JDK内置的Observable类和Obsever接口
- 设计模式之观察者2
- JAVA设计模式之观察者模式2
- 设计模式之观察者模式 (原创)
- 设计模式之Observer(观察者模式)
- 设计模式之Observer(观察者模式)
- 【设计模式】之观察者模式(Observer)
- 设计模式之--观察者模式(Observer)
- 设计模式之观察者模式(二)
- 设计模式之观察者(Observer)模式
- 设计模式之观察者(observer)模式
- 设计模式之观察者模式(Observer)
- 设计模式之观察者模式(一)
- 设计模式之观察者模式(二)
- Matlab之checkerboard-创建棋盘图像
- 一路走来的地图
- Activity 的Managing Tasks属性
- JDK 之 ConcurrentHashMap
- Android Service服务
- 设计模式之观察者模式(Obsever)2
- html转换成Pdf
- node.js常用模块
- 编程手动将钩子内容发送到126油箱
- 两个栈实现队列功能
- php+js+ajax+mysql实现省市三级联动
- javaScript_arguments
- 程序员练级之路
- 数据挖掘方向牛人(Business Intelligence, KDD and Data Mining People)