監聽器模型涉及以下三個對象,模型圖如下:
(1)事件:用戶對組件的一個操作,稱之爲一個事件
(2)事件源:發生事件的組件就是事件源
(3)事件監聽器(處理器):監聽並負責處理事件的方法
執行順序如下:
1、給事件源註冊監聽器
2、組件接受外部作用,也就是事件被觸發
3、組件產生一個相應的事件對象,並把此對象傳遞給與之關聯的事件處理器
4、事件處理器啓動,並執行相關的代碼來處理該事件。
二、代碼
/**
* @author liuchaoOvO on 2019/9/9
*/
/**
* 事件對象
*/
public class Even {
private Robot robot;
public Even(){
super();
}
public Even(Robot robot){
super();
this.robot = robot;
}
public Robot getRobot() {
return robot;
}
public void setRobot(Robot robot) {
this.robot = robot;
}
}
/**
* @author liuchaoOvO on 2019/9/9
*/
/**
* 事件源:機器人
*/
public class Robot {
private RobotListener listener;
/**
* 註冊機器人監聽器
* @param listener
*/
public void registerListener(RobotListener listener){
this.listener = listener;
}
/**
* 工作
*/
public void working(){
if(listener!=null){
Even even = new Even(this);
this.listener.working(even);
}
System.out.println("機器人開始工作......");
}
/**
* 跳舞
*/
public void dancing(){
if(listener!=null){
Even even = new Even(this);
this.listener.dancing(even);
}
System.out.println("機器人開始跳舞......");
}
}
/**
* @author liuchaoOvO on 2019/9/9
*/
/**
* 事件監聽器
*/
public interface RobotListener {
public void working(Even even);
public void dancing(Even even);
}
/**
* @author liuchaoOvO on 2019/9/9
*/
public class MyRobotListener implements RobotListener{
@Override
public void working(Even even) {
Robot robot = even.getRobot();
System.out.println("機器人工作提示:請看管好的你機器人,防止它偷懶!");
}
@Override
public void dancing(Even even) {
Robot robot = even.getRobot();
System.out.println("機器人跳舞提示:機器人跳舞動作優美,請不要走神哦!");
}
}
/**
* @author liuchaoOvO on 2019/9/9
*/
public class TestListener {
public static void main(String[] args) {
Robot robot = new Robot();
robot.registerListener(new MyRobotListener());
robot.working();
robot.dancing();
}
}