监听设计模式要包含几个重要的部分:
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("总经理说:这个解决方案不行,换一个!");
}
}