监听者模式

监听设计模式要包含几个重要的部分:

1、事件

2、事件源

3、响应事件的监听者

就拿下面的图片来解释一下


如图所示的,后面站着的肯定是监听者了,监听着敲代码这个事件,而程序猿就是那个敲代码的事件源

新建一个类测试如下:

package com.dada.test;

import java.util.ArrayList;
import java.util.List;

public class Main {
	public static void main(String[] args) {
		//定义监听者
		ActionEventLisener pm = new PM();
		ActionEventLisener director = new Director();
		ActionEventLisener chief = new Chief();
		Programmer coder = new Programmer();
		coder.addLisenser(pm);
		coder.addLisenser(director);
		coder.addLisenser(chief);
		coder.update();
	}
}

//定义事件
abstract class ActionEvent {
	
}

//定义事件的实现类
class Code extends ActionEvent {
	private boolean beat = true;
	private boolean update = true;
	public boolean isBeat() {
		return beat;
	}
	public void setBeat(boolean beat) {
		this.beat = beat;
	}
	public boolean isUpdate() {
		return update;
	}
	public void setUpdate(boolean update) {
		this.update = update;
	}
}

//定义被监听者
class Programmer {
	
	ActionEvent e = new Code();
	private List<ActionEventLisener> list = new ArrayList<ActionEventLisener>();
	
	//被监听者需要接受别人的监听才行
	public void addLisenser(ActionEventLisener lisener) {
		list.add(lisener);
	}
	
	//程序员修改代码
	public void update() {
		if(((Code)e).isBeat()) {
			System.out.println("程序员正在写代码...");
			//监听者们的做法
			for(int i = 0;i<list.size();i++) {
				ActionEventLisener lisener = list.get(i);
				lisener.actionPerformed(e);
			}
		}
	}
}

//定义监听接口
interface ActionEventLisener {
	public void actionPerformed(ActionEvent e);
}

//定义监听者
class PM implements ActionEventLisener {

	public void actionPerformed(ActionEvent e) {
		System.out.println("项目经理说:少了一个分号!");
	}
	
}

//定义总监
class Director implements ActionEventLisener {

	public void actionPerformed(ActionEvent e) {
		System.out.println("总监说:这个思路不行,要换一种解决方式!");
	}
	
}

//定义总经理
class Chief implements ActionEventLisener {

	public void actionPerformed(ActionEvent e) {
		System.out.println("总经理说:这个解决方案不行,换一个!");
	}
	
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值