观察者模式与事件监听器模式--java设计模式扫盲
来源:互联网 发布:淘宝主图制作技巧 编辑:程序博客网 时间:2024/05/22 08:24
最近在开发监控系统,涉及事件监听,所以又把之前的观察者设计模式和事件监听器模式拿了出来重新学习一下,总结内容如下:
观察者模式
1.名词解释
观察者对象:观察者对象是监听被观察者的一个对象,当被观察者状态发生变化的时候,会通知观察者对象,使观察者对象可以自己更新自己,多个观察者对象可以监听同一个被观察者
被观察者对象:也叫主题对象,主要是在自身状态发生变化的时候,会通知所有监听它的观察者
2.解决的问题
这种模式通常被用来做事件处理系统。观察者模式又被称为订阅-发布模式,被观察者也就是主题对象管理所有相依于它的观察者对象,并且在它自身状态变化的时候主动发出通知通知观察者,然后观察者会更新自己。一些基于事件驱动机制的技术或者语言,比如java NIO或者node.js,其基础模式都是观察者模式。
3.实现
观察者类
import java.util.Observable;import java.util.Observer;public class Watcher implements Observer { @Override public void update(Observable o, Object arg) { System.out.println("update() is called!"); }}被观察者类
import java.util.Observable;public class BeingWatcher extends Observable { void counter(int num) { for (; num >= 0; num--) { setChanged(); notifyObservers(new Integer(num)); try { Thread.sleep(100); } catch (InterruptedException e) { System.out.println("Sleep interrupeted"); } } }}测试一下
public class ObserverModeDemo { public static void main(String[] args) { BeingWatcher beingWatcher = new BeingWatcher(); Watcher watcher = new Watcher(); beingWatcher.addObserver(watcher); beingWatcher.counter(5); }}测试结果
监听器模式
所谓监听器模式,指的是事件源经过事件的封装传给监听器,当事件源触发事件之后,监听器收到事件的通知并执行事件回调方法。
监听器模式实现四个步骤:
1.定义事件源(具体的事件源,比如说,你点击一个button,那么button就是event source,要想使button对某些事件进行响应,你就需要注册特定的listener)
import java.util.Enumeration;import java.util.Vector;public class Source { private Vector repository = new Vector<>(); public Source() { } public void addListener(Listener listener) { repository.addElement(listener); } public void notifyEvent() { Enumeration enumer = repository.elements(); while (enumer.hasMoreElements()) { Listener listener = (Listener) enumer.nextElement(); listener.handleEvent(new Event(this)); } }}2.定义事件对象
import java.util.EventObject;public class Event extends EventObject { public Event(Object source) { super(source); // TODO Auto-generated constructor stub } public void say() { System.out.println("say method"); }}3.定义事件监听器接口
import java.util.EventListener;public interface Listener extends EventListener { public void handleEvent(Event ev);}4.定义监听器实现类
public class EventListener implements Listener { @Override public void handleEvent(Event ev) { System.out.println("listener start!"); ev.say(); }}测试一下
public class DemoTest { Source source; public DemoTest() { try { source = new Source(); EventListener listener = new EventListener(); source.addListener(listener); source.addListener(new Listener() { @Override public void handleEvent(Event event) { System.out.println("Method come from 匿名类..."); } }); source.notifyEvent(); } catch (Exception ex) { ex.printStackTrace(); } } public static void main(String args[]) { new DemoTest(); }}
阅读全文
0 0
- 观察者模式与事件监听器模式--java设计模式扫盲
- java设计模式--观察者模式和事件监听器模式
- java设计模式--观察者模式和事件监听器模式
- java设计模式--事件监听器模式和观察者模式
- java设计模式--观察者模式和事件监听器模式
- java设计模式--事件监听器模式和观察者模式
- java设计模式--事件监听器模式和观察者模式 .
- java设计模式--事件监听器模式和观察者模式
- java设计模式--事件监听器模式和观察者模式
- java设计模式--事件监听器模式和观察者模式
- 《JAVA与模式》之观察者设计模式及自定义监听器
- Java监听器与观察者模式
- java中的事件监听器和观察者模式
- Java设计模式--事件监听器
- 设计模式-观察者模式与事件委托
- 事件监听器模式和观察者模式
- 【java】事件与观察者模式
- 设计事件源被监听器监听(观察者设计模式)
- JavaScript日期对象使用总结 javascript Date日期对象的创建
- pex虚拟机自动安装
- 大规模分布式跟踪系统的理论
- Vue子父组件间的数据传递
- editplus初学前端之三
- 观察者模式与事件监听器模式--java设计模式扫盲
- match
- jQuery 学习记录
- BZOJ3533 SDOI2014 向量集
- 设计模式-抽象工厂模式-abstractfactory-python
- 大话设计模式笔记(三)——单一、开放封闭、依赖倒转、里氏替换四大设计原则
- shaderForge需要注意的地方
- cookie的定义及常见用法
- java学习整理20170801