老王,男,住隔壁,包工头一名---OLDWang,靠接工程项目过日子,近日老王手头有点拮据,靠以前的狐朋狗友接到一项政府工程(GovProjectByWang)----铺路(BuildRoad)。有工程了,老王撸起袖子加油干起来了,可是老王擅长吃吃喝喝,酒桌交际,核心铺路只知道大概步骤,具体不知怎么弄,为了按期完成完成工程,便将工程的核心--铺路转给老周(隔壁的邻居)。老周公司接手后,进行分析研究,启动工程项目--为老王修路(BuildRoadForWang),代码描述如下:
接口类:BuidRoad 老王给了个大框架,具体怎么修路不知道
public interface BuildRoad {
void toBuildRoad();
}
老周启动工程:BuildRoadForWang 老周是专业的,负责具体实现铺路过程(可惜,老周最后还是被老王摘了桃子,哈哈!)这里比拟实现接口的具体方法类并不是最终调用具体方法的类。
public class BuildRoadForWang implements BuildRoad {
// 老周为老王费劲心思,鞠躬尽瘁的去铺路
@Override
public void toBuildRoad() {
System.out.println("铺路的具体实现:挖路--->填石头--->浇柏油!!!");
}
}
由于政府对路质量要求较高,派工作组去老王那检查工作,要求老王汇报铺路具体实现,因此这老王需要老周告知,然后为了迎接工作组,老王花了心思准备一番:
public class GovProjectByWang {
private BuildRoad buildRoad;
//老王为迎接工作组,要老周上交付出心血的铺路方案
//这里相当于注册回调函数,即将接口类作为参数传入
public void getReportFromZhou(BuildRoad buildRoad){
this.buildRoad=buildRoad;
report();
}
private void report(){
buildRoad.toBuildRoad();
}
}
工作组来了,老王带着老周的智慧结晶去向工作组汇报了:
public class ReportForGov {
public static void main(String[] args) {
GovProjectByWang project=new GovProjectByWang();
//回调默认的方法
project.getReportFromZhou(new BuildRoadForWang());
//老王拍着胸口信誓旦旦的说到整个具体实现方案是他自己设计的
//回调自己实现的方法
project.getReportFromZhou(new BuildRoad(){
@Override
public void toBuildRoad() {
// TODO Auto-generated method stub
System.out.print("是我亲自到现场指导的!");
}
});
}
}
运行结果如上图所示。