设计模式系列--观察者模式基本
来源:互联网 发布:oracle创建表的sql语句 编辑:程序博客网 时间:2024/06/14 22:52
观察者模式属于设计模式中的行为型模式,也叫发布-订阅模式,实际上是一种事件监听机制。
基本思想是:有观察者和被观察者两种角色,当被观察者的行为有变化的时候(方法被调用),观察者就能被通知到。想成为被观察者的观察者,需要在被观察者那里登记。
角色:
Watcher(观察者接口)
ConWatcher(具体观察者)
Watched(被观察者接口)
ConWatched(具体被观察者)
代码:
观察者抽象
public interface Watcher { //被通知的方法 public void update();}
具体观察者
public class ConWatcher implements Watcher{ @Override public void update() { System.out.println(this+"被通知了"); }}
被观察抽象
public interface Watched { public void attach(Watcher w); public void detach(Watcher w); public void notifyWatcher();}
具体被观察者
public class ConWatched implements Watched{ List<Watcher> list = new ArrayList<Watcher>(); /** * 观察者需要在被观察者那里登记 */ @Override public void attach(Watcher w) { list.add(w); } @Override public void detach(Watcher w) { list.remove(w); } /** * 通知所有观察者 */ @Override public void notifyWatcher() { for(Watcher w:list){ w.update(); } } /** * 被观察的事件 */ public void change(){ this.notifyWatcher(); }}
测试
public class Client { public static void main(String[] args) { ConWatched zhangsan=new ConWatched();//被观察者 Watcher watcher1 = new ConWatcher();//观察者 Watcher watcher2 = new ConWatcher(); zhangsan.attach(watcher1);//到观察者那里登记 zhangsan.attach(watcher2); zhangsan.change();//被观察者变化了 }}
运行结果:
com.pattern.Observe.one.ConWatcher@9945ce被通知了com.pattern.Observe.one.ConWatcher@b5dac4被通知了
由此可见,两个观察对象都被通知了
0 0
- 设计模式系列--观察者模式基本
- 设计模式系列:观察者模式
- 【设计模式系列】--观察者模式
- 设计模式初学者系列-观察者模式
- PHP设计模式系列 - 观察者模式
- 【大话设计模式系列】之观察者模式
- JAVA系列-设计模式-观察者模式
- Android设计模式系列--观察者模式
- Android设计模式系列--观察者模式
- Android设计模式系列--观察者模式
- Android设计模式系列--观察者模式
- Android设计模式系列--观察者模式
- Android设计模式系列--观察者模式
- Android设计模式系列--观察者模式
- Android设计模式系列--观察者模式
- Android设计模式系列--观察者模式
- Android设计模式系列--观察者模式
- Android设计模式系列--观察者模式
- uva 10047 The Monocycle
- C Prime plus 第六章习题
- Vijava 学习笔记之数据中心下(集群和非集群的资源池和ESXI)树形结构展示
- Eclipse安装SVN插件
- Linux网络配置相关
- 设计模式系列--观察者模式基本
- Java基础——对象加载顺序
- c++显示调用析构函数(转csdn)
- Android自定义控件实现登陆界面以及SharedPreferences实现记住密码功能
- 泛型程序设计
- 通过click事件动态改变引用的CSS文件,在不同浏览器下的表现
- Sql字符串分组Split函数的两种实现方法
- UVa 11464 EvenParity 偶数矩阵
- rrdtool绘制图像的简要原理