观察者模式
来源:互联网 发布:软件项目工作量评估 编辑:程序博客网 时间:2024/06/04 19:56
1.抽象主题角色(接口或者抽象类)
/** * 抽象主题角色 * 主题角色把所有的观察者对象的引用保存在一个列表里; * 每个主题都可以有任何数量的观察者。 * 主题提供一个接口可以加上或撤销观察者对象;主题角色又叫做抽象被观察者(Observable)角色 */public interface Watched {public void addWatcher(Watcher watch);public void removeWatcher(Watcher watch);public void notifyWatchers(String str);}
2.抽象观察者(Observer)角色 (为所有的具体观察者定义一个接口,在得到通知时更新自己)
//抽象观察者public interface Watcher {public void update(String str);}
3.具体主题(ConcreteSubject)角色
/** * 具体主题(ConcreteSubject)角色: * 保存对具体观察者对象有用的内部状态; * 在这种内部状态改变时给其观察者发出一个通知; * 具体主题角色又叫作具体被观察者角色; * @author gulijiang */public class ConcreteWatched implements Watched {private List<Watcher> list = new ArrayList<Watcher>();@Overridepublic void addWatcher(Watcher watch) {list.add(watch);}@Overridepublic void removeWatcher(Watcher watch) {list.remove(watch);}@Overridepublic void notifyWatchers(String str) {for (Watcher watcher : list) {watcher.update(str);}}}
4.具体观察者(ConcreteObserver)角色
public class ConcreteWatcher implements Watcher {@Overridepublic void update(String str) {System.out.println(str);}}
5.测试类
public class Test {public static void main(String[] args) {Watched girl = new ConcreteWatched();Watcher watcher1 = new ConcreteWatcher();Watcher watcher2 = new ConcreteWatcher();Watcher watcher3 = new ConcreteWatcher();girl.addWatcher(watcher1);girl.addWatcher(watcher2);girl.addWatcher(watcher3);girl.notifyWatchers("开心");girl.removeWatcher(watcher2);girl.notifyWatchers("不开心");}}
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 安全文件传输分析
- ios项目icon和default图片命名规则
- Nutch相关框架安装使用最佳指南
- 为Action配置method属性
- 关于Spring中配置LocalSessionFactoryBean来生成SessionFactory
- 观察者模式
- iOS学习笔记30—检测硬件平台版本号
- unity3d_iGUI(1)
- LateX学习网站
- HBase介绍
- MFC数组类CArray的使用的操作详解[转]
- ServiceManager 进程启动源码分析
- Ubuntu 11.04 内核升级到12.10版本遇到的问题总结
- Linux-Apache-MySQL-PHP网站架构方案分析