Java-马士兵设计模式学习笔记-观察者模式-OOD 封装Listener
一、概述
childe类中的是关联监听者dad的,若要再增加监听者,会很不方便,且要修改代码。好的方法是封装监听者类,用addListener()方法动态添加监听者
二、代码
1.Test.java
class WakenUpEvent{
	private long time;
	private String location;
	private Child source;
	public WakenUpEvent(long time, String location, Child source) {
		super();
		this.time = time;
		this.location = location;
		this.source = source;
	}
	public long getTime() {
		return time;
	}
	public void setTime(long time) {
		this.time = time;
	}
	public String getLocation() {
		return location;
	}
	public void setLocation(String location) {
		this.location = location;
	}
	public Child getSource() {
		return source;
	}
	public void setSource(Child source) {
		this.source = source;
	}
}
class Child implements Runnable {
	private List<WakenUpListener> wakenUpListeners = new ArrayList<WakenUpListener>();
	public void addWakenUpListener(WakenUpListener wul){
		wakenUpListeners.add(wul);
	}
	public void wakeUp(){
		for(int i = 0; i < wakenUpListeners.size(); i++){
			WakenUpListener l = wakenUpListeners.get(i);
			l.actionToWakenUp(new WakenUpEvent(System.currentTimeMillis(), "bed", this));
		}
	}
	@Override
	public void run() {
		try {
			Thread.sleep(3000);
		} catch (Exception e) {
			e.printStackTrace();
		}
		wakeUp();
	}
}
interface WakenUpListener {
	public void actionToWakenUp(WakenUpEvent e);
}
class Dad implements WakenUpListener {
	public void actionToWakenUp(WakenUpEvent e) {
		System.out.println("Fedd the child");
	}
}
class GrandFather implements WakenUpListener {
	public void actionToWakenUp(WakenUpEvent e) {
		System.out.println("抱孩子");
	}
}
public class Test {
	public static void main(String[] args) {
		Child c = new Child();
		c.addWakenUpListener(new Dad());
		c.addWakenUpListener(new GrandFather());
		new Thread(c).start();
	}
}
三、运行结果

Java-马士兵设计模式学习笔记-观察者模式-OOD 封装Listener的更多相关文章
- Java-马士兵设计模式学习笔记-观察者模式-OOD 封装event
		把小孩醒来时的具体情况封装成事件类 Test.java class WakenUpEvent{ private long time; private String location; private ... 
- Java-马士兵设计模式学习笔记-观察者模式-OOD 线程 改进
		1.概述 由于上一个文章<Java OOD 线程>中的线程是父类主动监听childe,比较耗资源,现改进为childe类醒来后主动联系父类 2.代码 Test.java class Chi ... 
- Java-马士兵设计模式学习笔记-观察者模式-OOD线程
		一.概述 1.情景:孩子睡觉,醒后要吃东西,用java模拟此情况 2.设计:child类,Dad类,都继承Runnable,dad线程监视child线程(缺点:因为要监视,所以耗cup资源) 二.代码 ... 
- Java-马士兵设计模式学习笔记-观察者模式-模拟Awt Button
		一.概述 Java 的Awt是 Observer模式,现用Java自己模拟awt中Button的运行机制 二.代码 1.Test.java import java.text.DateFormat; i ... 
- Java-马士兵设计模式学习笔记-观察者模式-AWT简单例子
		1.AWT简单例子 TestFrame.java import java.awt.Button; import java.awt.Frame; import java.awt.event.Action ... 
- Java-马士兵设计模式学习笔记-观察者模式-读取properties文件改成单例模式
		一.概述 1.目标:读取properties文件改成单例模式 二.代码 1.Test.java class WakenUpEvent{ private long time; private Strin ... 
- Java-马士兵设计模式学习笔记-总结
		<马士兵设计模式学习>学习了以下模式: 1.装饰者模式(例子:水管工,木工) 2.策略模式(例子:老师用职称比大小.学生用成绩比大小) 3.简单工厂模式(例子:VechileFactory ... 
- Java-马士兵设计模式学习笔记-代理模式-聚合与继承方式比较
		一.概述 1.目标:要在Tank的move()方法做时间代理及日志代理(可以设想以后还要增加很多代理处理),且代理间的顺序可活更换 2.思路: (1)聚合:代理类聚合了被代理类,且代理类及被代理类都实 ... 
- Java-马士兵设计模式学习笔记-代理模式-动态代理 调用Proxy.newProxyInstance()
		一.概述 1.目标:不自己写代理类,利用Proxy.newProxyInstance()动态生成 2.用到的知识点: (1)//编译源码,生成class,注意编译环境要换成jdk才有compiler, ... 
随机推荐
- 58.xilinx原语DCM,PLL的使用
			DCM_BASE 基本数字时钟管理模块的缩写,是相伴和频率可配置的数字锁相环电路,常用于FPGA系统中复杂的时钟管理.如需要频率和相位动态配置,则可以选用DCM_ADV原语,如需要相位动态偏移,可使用 ... 
- EasyUI 兼容 IE6 方法总结
			1.combobox 如果单选,multiple必须也设置为true.这个ie7如果没设置,会保持多选状态,算是一个bug. 2.combobox 最好用js来渲染,而不是一开始就class=“eas ... 
- PB串口编程资料(转)
			----MSCOMM32参数基本介绍2008年03月29日 星期六 上午 11:37MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能.MSComm控件在串口编程时非常方便,程序 ... 
- < java.util >-- Set接口
			Set接口中的方法和Collection中方法一致的.Set接口取出方式只有一种,迭代器. |--HashSet:底层数据结构是哈希表,线程是不同步的.无序,高效: HashSet集合保证元素唯一性: ... 
- 快速排序QuickSort
			前几天实现了直接插入排序.冒泡排序和直接选择排序这三个基础排序.今天看了一下冒泡排序的改进算法,快速排序.单独记录一下,后面还有归并和基数排序等 快速排序 1.选择一个支点默认为数组第一个元素及arr ... 
- mysql使用二进制日志恢复数据
			一.恢复到某个二进制文件 1.开启二进制日志 在mysqld的配置节点下添加如下配置 log-bin="E:/Mysql57BinLog/binlog"(windows下的路径,l ... 
- java笔试题(1)
			char型变量中能不能存贮一个中文汉字? char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦.不过,如果某个特殊的汉字没 ... 
- 随堂作业——到底有几个“1”(C++)
			一.设计思路 在课堂上讨论的时候,老师提出的思路是利用之前的结果计算出比它更大的数字的“1”.但是我不是这么想的,我是把输入的正整数每位上的数都分解出来计算.如abc,就先算c,再加上b,最后再加上a ... 
- xml基础学习笔记02
			接着上次的xml笔记01 ,记录一下如何DOM创建xml 一.由于没有特意来写博客,都是在程序中用注释的方法记录笔记,整理过来难免格式错误,排版什么的,大家好事看不懂就仔细看给出的代码加上注释,一定会 ... 
- Codeforces Round #354 (Div. 2) C. Vasya and String
			题目链接: http://codeforces.com/contest/676/problem/C 题解: 把连续的一段压缩成一个数,对新的数组求前缀和,用两个指针从左到右线性扫一遍. 一段值改变一部 ... 
