设计模式系列--观察者模式基本
2015-06-27 19:15
405 查看
观察者模式属于设计模式中的行为型模式,也叫发布-订阅模式,实际上是一种事件监听机制。
基本思想是:有观察者和被观察者两种角色,当被观察者的行为有变化的时候(方法被调用),观察者就能被通知到。想成为被观察者的观察者,需要在被观察者那里登记。
角色:
Watcher(观察者接口)
ConWatcher(具体观察者)
Watched(被观察者接口)
ConWatched(具体被观察者)
代码:
观察者抽象
具体观察者
被观察抽象
具体被观察者
测试
运行结果:
由此可见,两个观察对象都被通知了
基本思想是:有观察者和被观察者两种角色,当被观察者的行为有变化的时候(方法被调用),观察者就能被通知到。想成为被观察者的观察者,需要在被观察者那里登记。
角色:
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被通知了
由此可见,两个观察对象都被通知了
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 设计模式之创建型模式
- 浅谈设计模式的学习
- 架构纵横谈之二 ---- 架构的模式与要点
- PostgreSQL教程(二):模式Schema详解
- 代理区独立模式的说明
- C#中的递归APS和CPS模式详解
- C#迭代器模式(Iterator Pattern)实例教程
- C#观察者模式(Observer Pattern)实例教程
- C#单例模式(Singleton Pattern)实例教程
- Erlang中的模块与模式匹配介绍
- C#装饰器模式(Decorator Pattern)实例教程
- PHP设计模式之装饰者模式代码实例
- php设计模式之单例模式实例分析
- 介绍php设计模式中的工厂模式
- PHP设计模式之适配器模式代码实例
- 动态代理的5模式使用示例和Mixin模式
- C#命令模式(Command Pattern)实例教程