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

原创 2013年12月04日 10:22:06

类的四大基本关系: 

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 {

	@Override
	public void action() {
		System.out.println("ClickListener action!");
	}

}

 

public class DoubleClickListener implements Listener {

	@Override
	public void action() {
		System.out.println("DoubleClickListener action!");
	}

}

 

2、定义事件

public interface Event {
	int getType();
}

 

public class ClickEvent implements Event {

	@Override
	public int getType() {
		return 1;
	}

}

 

public class DoubleClickEvent implements Event {

	@Override
	public 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;
			}
		}
	}

}

 

java设计模式--观察者模式和事件监听器模式

监听器模式:事件源经过事件的封装传给监听器,当事件源触发事件后,监听器接收到事件对象可以回调事件的方法 观察者模式:观察者(Observer)相当于事件监听者,被观察者(Observable)相当于事...

揭开观察者设计模式的神秘面纱,手把手教你写监听器

我们在写代码的时候,遇到最常用的就是监听器了。那么实际中,我们也要进行事件的监听。而有些事件是业务逻辑需要实现的,跟随事物变化动态变化的。假如说我们要实现一个事物,有位置的监听,有颜色的监听,有坐标的...

设计模式学习----观察者模式(事件监听实现)

今天学习了新的设计模式----观察者模式,其实这种设计模式,我们早就接触过,做过GUI编程的同学肯定会知道,事件的注册监听等机制,其实这个机制的实现就是利用了观察者模式。     可能在程序中,我们...

设计模式--观察者(监听)设计模式

学习了一下设计模式,怕忘记了,写个总结,也好常复习一下。 监听设计模式要包含几个重要的部分: 1、事件 2、事件源 3、响应事件的监听者 就拿下面的图片来解释一下 如图所示的,后面...

揭开观察者设计模式的神秘面纱,手把手教你写监听器

我们在写代码的时候,遇到最常用的就是监听器了。那么实际中,我们也要进行事件的监听。而有些事件是业务逻辑需要实现的,跟随事物变化动态变化的。假如说我们要实现一个事物,有位置的监听,有颜色的监听,有坐标的...

java设计模式--事件监听器模式和观察者模式

监听模式  监听器模式:事件源经过事件的封装传给监听器,当事件源触发事件后,监听器接收到事件对象可以回调事件的方法 观察者模式:观察者(Observer)相当于事件监听者,被观察者(O...

java设计模式--事件监听器模式和观察者模式 .

监听器模式:事件源经过事件的封装传给监听器,当事件源触发事件后,监听器接收到事件对象可以回调事件的方法 观察者模式:观察者(Observer)相当于事件监听者,被观察者(Observable)相当于...

java设计模式--事件监听器模式和观察者模式

监听器模式:事件源经过事件的封装传给监听器,当事件源触发事件后,监听器接收到事件对象可以回调事件的方法 观察者模式:观察者(Observer)相当于事件监听者,被观察者(Observable)相当于...

java设计模式--观察者模式和事件监听器模式

文章转载于:http://www.java2000.net/p9452 复习设计模式,看到observer观察者模式,说法是该模式和iterator迭代器模式类似已经被整合进jdk,但是jdk提...
  • sbvfhp
  • sbvfhp
  • 2013年04月06日 13:40
  • 5377

浅析JavaScript设计模式——发布-订阅/观察者模式

观察者模式 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知 前一段时间一直在写CSS3的文章 一直都没写设计模式 今天来写写大名鼎鼎观察者模式 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:监听器设计模式(观察者模式、订阅发布模式)
举报原因:
原因补充:

(最多只允许输入30个字)