设计模式之观察者模式、监听者模式
来源:互联网 发布:seo公司哪家好 编辑:程序博客网 时间:2024/06/05 20:26
1、观察者模式:多个对象依赖于一个对象状态的变化,或者说,一个对象的状态变化会“通知”给多个对象,这个时候可以用到观察者模式。
观察者(Observer):被“通知”的对象
被观察者(Subject ):被观察的对象
思想比较简单,就是观察者注册到被观察者,当某个状态改变的时候,被观察者就通知所有观察者
根据依赖倒置原则,设计出得关系图:
参考代码:
/**
* 观察者
*/
public interface Observer {
}/**
* 被通知的时候要做的事在handler里面实现
*/
void handler();
* 2014 下午11:38:15
* 被观察者
*/
public interface Subject {
/**
* 存放观察者的数组,通知的时候就是遍历这个数组去执行每个观察者的handler方法
*/
List<Observer> observers = new ArrayList<Observer>();
/**
* 添加观察自己的观察者
*/
void addObserver(Observer obj);
/**
* 通知观察者执行它们各自的handler方法
*/
void notifyToObserver();
/**
* 移除观察自己的观察者
*/
void removeObserver(Observer obj);
}
2、监听者模式,是观察者模式的改进,除了有观察者、被观察在,还有事件源
事件源:观察者观察的事件,一般是一个对象,在观察者和被观察者之间传递一些参数
观察者:事件源发生的时候,执行一些具体操作。一般是listener
被观察者:派发事件的对象
思想:跟观察者模式类似,不同的是,观察者注册到被观察者的时候,需要注册感兴趣的事件,比如update、finished等。
/**
*
* 2014 下午11:55:32
* 事件源:可以在监听者与被监听者之间传递参数,可以继承它构造需要的具体事件源
*/
public abstract class FutrueEvent {
private Object type;//事件源类型
private Object value;//参数
public FutrueEvent(Object type,Object value){
this.type = type;
this.value = value;
}
}
/**
* 2014 下午11:53:18
* 监听者
*/
public interface EventListener<E extends FutrueEvent> {
/**
* 事件触发的时候要做的事在handler里面实现
*/
void handler(E source);
}
/**
*
* 2014 下午11:54:31
* 事件通知组件
*/
public interface EventNotifier<T,E extends FutrueEvent> {
/**
* 事件监听者容器:Multimap是特殊的Map,同个key的时候不会覆盖,而是像队列一样添加到同个key上。这样,同个事件源就可以有多个监听者了
*/
private final Multimap<T, EventListener<E>> listeners = LinkedHashMultimap.create();
/**
* 注册监听者
*/
void addListener(T t,EventListener<E> lister);
/**
* 通知所有注册事件t的监听者
*/
void notifyListener(T t);
/**
* 移除事件
*/
void removeListener(T t);
}
注意:要保证addListener和notifyListener的事件通知事件是同个对象,不然通知派发不出去的。
- 设计模式之观察者模式、监听者模式
- 05 设计模式之--观察者_监听者设计模式
- 设计模式--观察者(监听)设计模式
- 设计模式--观察者(监听)设计模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 2014年中国科技发展八大趋势:本土手机厂商崛起
- Dissecting Amazon ELB : 18 things you should know
- JAVA设计模式-原型模式(ProtoType)
- 开心博客开通了
- 二分查找(折半搜索)算法
- 设计模式之观察者模式、监听者模式
- Simplify Path
- 块设备驱动实战基础篇一 (170行代码构建一个逻辑块设备驱动)
- 【解题报告】百练2797_最短前缀(字典树)
- Leetcode: Clone Graph
- Nginx学习笔记(四):Hello Nginx!
- uva-101
- SHELL : 移动文件
- Cocos2d-xna : 横版战略游戏开发实验1 开篇