Java(观察者模式 observer)
来源:互联网 发布:少儿编程 编辑:程序博客网 时间:2024/04/29 09:07
/** * 被观察者接口(抽象的被观察者接口) * * */public interface AbstractWatched {/** * 增加一个观察者 * @param abstractWatcher */public void addWatcher(AbstractWatcher watcher);/** * 删除一个观察者 * @param abstractWatcher */public void removeWatcher(AbstractWatcher watcher);/** * 删除所有观察者 */public void removeAllWatchers();/** * 改变被观察者的状态 */public void changeStatus();}
/** * 抽象的观察者角色 * * */public interface AbstractWatcher { /** * 观察者的更新操作 */ public void update();}
/** * 具体的被观察者实现 * * */public class ConcreteWatched implements AbstractWatched {private List<AbstractWatcher> watchers = new ArrayList<AbstractWatcher>();@Overridepublic void addWatcher(AbstractWatcher watcher) {watchers.add(watcher);}@Overridepublic void changeStatus() {System.out.println("status changed");for (AbstractWatcher watcher : watchers) {watcher.update();//通知所有的观察者自动更新}}@Overridepublic void removeAllWatchers() {watchers.clear();}@Overridepublic void removeWatcher(AbstractWatcher watcher) {watchers.remove(watcher);}}
/** * 具体的观察者角色 * * */public class ConcreteWatcher implements AbstractWatcher {@Overridepublic void update() {System.out.println("watcher updated");}}
public class Client {public static void main(String[] args) {AbstractWatched watched = new ConcreteWatched();AbstractWatcher watcher1 = new ConcreteWatcher();watched.addWatcher(watcher1);AbstractWatcher watcher2 = new ConcreteWatcher();watched.addWatcher(watcher2);AbstractWatcher watcher3 = new ConcreteWatcher();watched.addWatcher(watcher3);watched.changeStatus();System.out.println("-------------------------");watched.removeWatcher(watcher1);watched.changeStatus();}}
观察者模式在Java中占据举足轻重的位置,在AWT1.1和使用SAX解析xml文件中,都使用到观察者模式。所以Java内置也对观察者模式提供了API
import java.util.Observable;/** * 被观察者,需要继承Observable类 * @author yinhao * */public class Watched extends Observable {//测试方法public void count(int number){for (;number >= 0; number--) {setChanged();//标识下,被观察者已经改变了,必须调用该方法,才会通知其他的观察者notifyObservers();//通知观察者状态已改变try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}}
import java.util.Observable;import java.util.Observer;/** * 观察者,需要实现Observer接口 * @author yinhao * */public class Watcher implements Observer {@Overridepublic void update(Observable o, Object arg) {System.out.println("updated");}}
public class Client {public static void main(String[] args) {Watched watched = new Watched();Watcher watcher = new Watcher();watched.addObserver(watcher);watched.count(10);}}
0 0
- Java(观察者模式 observer)
- java Observer 观察者模式
- Java观察者模式(Observer)
- java观察者(Observer)模式
- 观察者模式(Observer) Java
- Java Observer(观察者模式)
- Java观察者模式(Observer模式)
- Java观察者模式(Observer模式)
- Java设计模式----观察者模式(Observer)
- Java 设计模式-观察者模式(Observer)
- Java观察者模式(Observer模式)
- java实现观察者(Observer)模式
- Java 观察者(Observer)模式的浅析
- Java之观察者模式(Observer Pattern)
- Java设计模式—观察者(Observer)
- Java 设计模式--观察者(Observer)
- 观察者模式(Observer)-----基于JAVA语言
- 观察者模式(OBSERVER)
- fzu2157(树形)
- 回溯算法
- 第四周作业
- jQuery源码阅读[2]document ready
- php环境设置虚拟域名
- Java(观察者模式 observer)
- UML视频之总结
- 笔记14--android中Shape、Selector
- Point 平面点类 java
- 《算法导论》笔记 第7章 7.1快速排序的描述
- 从Java到C++——基本数据类型
- 【设计模式系列】设计模式读书笔记——主流设计模式的简单介绍
- 函数的调用约定 __stdcall __cdecl __fastcall
- 华为练习 6 地铁最佳路径