浅谈监听器模式

2019-04-14 12:41发布

class="markdown_views prism-atom-one-light">

监听器模式

  在编程的世界中,监听无所不在,譬如你点击一个音乐播放器的播放按钮,就播放一首音乐;点击相机的拍照按钮,就拍一张照片。也就是你触发某种行为,便会执行具体的动作。
  监听器模式有三个要素——事件源、事件对象、监听器。
事件源: 顾名思义,事件发生的源头,比如点击的按钮,属于被监听的对象;
事件对象: 这个经常和事件源混淆,它经常被用来包装事件源,切记,它毕竟是个事件,比如点击事件,和事件源的区别自己感受,木有栗子;
监听器: 这个是监听器模式的核心,定义事件发生后的动作,通常事件对象作为监听器中定义的函数入参。
第一步,添加事件对象ClickEvent。 package listener; import java.util.EventObject; public class ClickEvent extends EventObject { private int id; public final static int SINGLE_CLICK = 1; //单击事件 public final static int DOUBLE_CLICK = 2; //双击事件 public ClickEvent(Object source){ super(source); } public ClickEvent(Object source,int id){ super(source); switch(id){ case SINGLE_CLICK: this.id = SINGLE_CLICK; break; case DOUBLE_CLICK: this.id = DOUBLE_CLICK; break; } } public int getId(){ return this.id; } } 第二步,定义一个时间监听器OnClickListener。 package listener; import java.util.EventListener; //监听器必须要集成EventListener,这个是默认继承的。 public interface OnClickListener extends EventListener { void click(ClickEvent clickEvent); void doubleClick(ClickEvent clickEvent); } 第三步,定义一个事件源Button。 package listener; import java.util.EventObject; public class Button { private OnClickListener clickListener; public void setClickListener(OnClickListener clickListener){ this.clickListener = clickListener; } public void handleEvent(EventObject e) { if (e instanceof ClickEvent) { ClickEvent event = (ClickEvent)e; switch(event.getId()){ case ClickEvent.SINGLE_CLICK: this.clickListener.click(event); break; case ClickEvent.DOUBLE_CLICK: this.clickListener.doubleClick(event); break; } } } } 第四步,添加一个事件源产生的对象。 package listener; public class EventSource implements OnClickListener { public Button testOnClick() { final Button button = new Button(); button.setClickListener(this); return button; } @Override public void click(ClickEvent clickEvent) { System.out.println("鼠标单击事件: " + clickEvent.getId()); } @Override public void doubleClick(ClickEvent clickEvent) { System.out.println("鼠标双击事件: " + clickEvent.getId()); } } 第五步,添加测试方法。 package listener; public class Main { public static void main(String[] args) { final EventSource eventSource = new EventSource(); Button button = eventSource.testOnClick(); ClickEvent clickEvent = new ClickEvent(EventSource.class, ClickEvent.SINGLE_CLICK); button.handleEvent(clickEvent); } } 第六步,输出 鼠标单击事件: 1   监听器监听自己感兴趣的事件,一旦该事件被触发或改变,立即得到通知,做出响应,监听器一般是接口,用来约定调用的方式。当事件源对象上发生操作时,它会将调用事件监听器的一个方法,并在调用该方法时传递事件对象过去。事件监听器实现类通常是由开发人员编写,开发人员通过事件对象拿到事件源,从而对事件源上的操作进行处理。
  观察者模式原理和监听器一样的,使用的关键在搞清楚什么是观察者、什么是被观察者。观察者(Observer)相当于事件监听器。被观察者(Observable)相当于事件源和事件,执行事件源通知逻辑时,将会回调Observer的回调方法update,只是在观察者模式中常用的是反射,而在监听器模式中使用的是callback。 浅谈状态模式
浅谈建造者模式
浅谈工厂模式
浅谈代理模式
浅谈适配器模式