监听器设计模式(观察者模式、订阅发布模式)

来源:互联网 发布:安卓相册软件 编辑:程序博客网 时间:2024/05/17 00:51

类的四大基本关系: 

a.关联关系:如A类调用B类。 

b.继承关系:如A类是B类的父类。 

c.聚合关系:如装橘子的箱子,箱子是否存在与里面装没装橘子没有任何关系,也就是说橘子不会影响箱子的存在。 

d.组合关系:如一个小组,小组是否存在与小组中是否有组员是息息相关的,如果没有组员,小组就不存在了。

 

监听器模式:事件源经过事件的封装传给监听器,当事件源触发事件后,监听器接收到事件对象可以回调事件的方法

 

观察者模式:观察者(Observer)相当于事件监听者,被观察者(Observable)相当于事件源和事件,执行逻辑时通知observer即可触发oberver的update,同时可传被观察者和参数

 

1、定义监听器

public interface Listener {public void action();}

 

public class ClickListener implements Listener {@Overridepublic void action() {System.out.println("ClickListener action!");}}

 

public class DoubleClickListener implements Listener {@Overridepublic void action() {System.out.println("DoubleClickListener action!");}}

 

2、定义事件

public interface Event {int getType();}

 

public class ClickEvent implements Event {@Overridepublic int getType() {return 1;}}

 

public class DoubleClickEvent implements Event {@Overridepublic int getType() {return 2;}}

 

3、定义绑定事件的对象

public class Client {Listener listener;Event event;public static void main(String[] args) {// 1、假定client是数据源Client client = new Client();// 2、给数据源绑定事件监听Listener listener = new DoubleClickListener();client.addListener(listener);// 3、触发“双击”事件DoubleClickEvent dce = new DoubleClickEvent();client.addEvent(dce);// 4、触发“单击”事件ClickEvent ce = new ClickEvent();client.addEvent(ce);}public void addListener(Listener listener) {this.listener = listener;}public void addEvent(Event event) {//首先必须要存在添加了监听,如果没有监听就没有任何动作if (this.listener != null) {this.event = event;int eventType = event.getType();switch (eventType) {case 1:if (this.listener.getClass() == ClickListener.class) {this.listener.action();} else {System.err.println("没有绑定单击事件");}break;case 2:if (this.listener.getClass() == DoubleClickListener.class) {this.listener.action();} else {System.err.println("没有绑定双击事件");}break;default:break;}}}}