Java回調實現
有個這樣的問題:老闆(Boss)讓工人(Worker)幹完活告訴他乾的狀況如何。
其實是一個典型的回調問題,Java實現以下:
/**
* Created by IntelliJ IDEA.
* User: leizhimin
* Date: 2008-7-31 13:18:33
* 事件接口
*/
public
interface Event {
/**
* 返回發生事件信息
*
* @return 事件信息
*/
public String happendEvent();
}
/**
* Created by IntelliJ IDEA.
* User: leizhimin
* Date: 2008-7-31 13:18:14
* 事件A
*/
public
class EventA
implements Event {
/**
* 返回發生事件信息
*
* @return 事件信息
*/
public String happendEvent() {
return
"發生了事件 EventA!";
}
}
/**
* Created by IntelliJ IDEA.
* User: leizhimin
* Date: 2008-7-31 13:18:21
* 事件B
*/
public
class EventB
implements Event{
/**
* 返回發生事件信息
* @return 事件信息
*/
public String happendEvent() {
return
"發生了事件 EventB!";
}
}
/**
* Created by IntelliJ IDEA.
* User: leizhimin
* Date: 2008-7-31 13:20:48
* 工人
*/
public
class Worker {
private Event event;
//事件
private String name;
//工人姓名
private Boss boss;
//工人所屬的老闆
public Worker(String name, Boss boss) {
this.name = name;
this.boss = boss;
}
/**
* 幹活
*/
public
void doWork() {
System.out.println(name +
" is doing working...");
//工人挺辛苦,幹着枯燥乏味的重複工做,哈哈
for (
int i = 0; i < 2000000; i++) {
int x = i / 234 + 234;
}
System.out.println(name +
" was finished work.");
//向老闆說明發生的狀況
boss.getWorkerEvent(
this, event);
}
public Event getEvent() {
return event;
}
public
void setEvent(Event event) {
this.event = event;
}
public String getName() {
return name;
}
public
void setName(String name) {
this.name = name;
}
}
/**
* Created by IntelliJ IDEA.
* User: leizhimin
* Date: 2008-7-31 13:26:22
* 老闆
*/
public
class Boss {
private String name;
public Boss(String name) {
this.name = name;
}
/**
* 老闆接收工人的事件
* @param worker 工人
* @param event 事件
*/
public
void getWorkerEvent(Worker worker, Event event) {
System.out.println(
"老闆接收到事件信息: "+worker.getName() +
": " + event.happendEvent());
}
}
/**
* Created by IntelliJ IDEA.
* User: leizhimin
* Date: 2008-7-31 13:35:38
* 測試類
*/
public
class Test {
public
static
void main(String args[]){
//初始化老闆和工人
Boss boss =
new Boss(
"老闆");
Worker worker1=
new Worker(
"張三",boss);
Worker worker2=
new Worker(
"李四",boss);
//捏造兩個事件
Event event1 =
new EventA();
Event event2 =
new EventB();
//事件是工人發出的
worker1.setEvent(event1);
worker2.setEvent(event2);
//工人幹活,幹完了通知老闆乾的狀況如何
worker1.doWork();
worker2.doWork();
}
}
運行結果:
張三 is doing working...
張三 was finished work.
老闆接收到事件信息: 張三: 發生了事件 EventA!
李四 is doing working...
李四 was finished work.
老闆接收到事件信息: 李四: 發生了事件 EventB!
Process finished with exit code 0
呵呵,工人幹活完成後,自動將發生的事件彙報給老闆。
固然,若是工人不少,每一個人都彙報的話,老闆確定會煩,那麼老闆可能會下達,發生了嚴重問題的員工才須要彙報問題。這個時候,須要作個事件過濾。 轉自http://lavasoft.blog.51cto.com/62575/90453