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

原创 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)相当于事...
  • dongnan591172113
  • dongnan591172113
  • 2013年04月08日 11:18
  • 43250

设计模式之监听器模式

事件处理模型: 组件(事件源)不处理自己的事件,而是将事件处理委托给外部的处理实体(监听器, 这种事件处理模型称为事件的 授权处理模型。 不同的事件,可以交由不同类型的监听器去处理 事件源: 提...
  • wobendiankun
  • wobendiankun
  • 2014年10月04日 16:02
  • 1298

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

类的四大基本关系:  a.关联关系:如A类调用B类。  b.继承关系:如A类是B类的父类。  c.聚合关系:如装橘子的箱子,箱子是否存在与里面装没装橘子没有任何关系,也就是说橘子不会影响箱子的存...
  • hbiao68
  • hbiao68
  • 2013年12月04日 10:22
  • 637

十一、观察者模式(发布-订阅模式)Observer

一、定义 定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,使得他们能够自动更新自己。 二、结构图 三、代码示例...
  • gezi2015129
  • gezi2015129
  • 2017年03月29日 16:57
  • 69

Java观察者模式以及与订阅发布者模式区别

设计模式复习,代码是最好的说明。 定义:观察者模式定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新,属于行为类模式。 注意:观察者模式和发布订阅...
  • poyuan97
  • poyuan97
  • 2017年09月28日 16:15
  • 138

java笔记--设计模式之观察者(订阅/发布)模式

1.定义        定义对象间的一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 2.解决的问题     ...
  • android_cmos
  • android_cmos
  • 2016年01月09日 19:04
  • 6470

消息队列-ActiveMQ学习笔记(三)-发布-订阅消息模式实现

发布-订阅消息模式与点对点模式类似,只不过在session创建消息队列时,由session.createQuene()变为session.createTopic()。 消息发布者代码: packa...
  • qq_26504875
  • qq_26504875
  • 2016年07月01日 16:19
  • 3043

基于事件的监听,消息订阅设计模式的实现的示例

  • 2009年11月17日 16:41
  • 37KB
  • 下载

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

观察者模式 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知 前一段时间一直在写CSS3的文章 一直都没写设计模式 今天来写写大名鼎鼎观察者模式 ...
  • q1056843325
  • q1056843325
  • 2016年11月26日 18:58
  • 3775

浅谈JavaScript设计模式——观察者模式(发布订阅模式)

观察者模式,又称为发布订阅模式,它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生变化时就会通知所有的观察者对象,使得它们能够自动更新自己的状态。   在观察...
  • zhouziyu2011
  • zhouziyu2011
  • 2017年04月02日 17:18
  • 398
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:监听器设计模式(观察者模式、订阅发布模式)
举报原因:
原因补充:

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