監聽器就是在事件之前再加上一段代碼,爲了降低耦合,寫成另一個類*(監聽類),並把當前的對象傳遞給這個類,爲了再降低監聽類的參數的耦合,需要把傳入的參數再封裝一下,封裝成even。
運行程序的main代碼
package com.Demo;
public class Demo {
public static void main(String[] args) {
Person p = new Person();
p.registerListener(new PersonListener() {
@Override
public void doRun(Even e) {
System.out.println(e.getP().getClass() + " is running");
}
@Override
public void doEat(Even e) {
System.out.println(e.getP().getClass() + " is eatting");
}
});
p.run();
p.eat();
}
}
運行結果:
class com.Demo.Person is running
run........
class com.Demo.Person is eatting
eat........
package com.Demo;
class Person {
private PersonListener listener;
public void run() {
if (listener != null) {
listener.doRun(new Even(this));
}
System.out.println("run........");
}
public void eat() {
if (listener != null) {
listener.doEat(new Even(this));
}
System.out.println("eat........");
}
// 註冊監聽器
public void registerListener(PersonListener listener) {
this.listener = listener;
}
}
監聽器接口
package com.Demo;
interface PersonListener {
public void doRun(Even e);
public void doEat(Even e);
}
參數even:
package com.Demo;
class Even {
private Person p;
public Even(Person p) {
this.p = p;
}
public Person getP() {
return p;
}
public void setP(Person p) {
this.p = p;
}
}