对JAVA回调函数的一点理解

          老王,男,住隔壁,包工头一名---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("是我亲自到现场指导的!");
    	}
    });    
}
}


       运行结果如上图所示。


你可能感兴趣的:(java)