我对Java中回调函数的理解

刚接触java时不明白是什么是回调函数,也不知道回调函数有什么作用,在工作中也碰到了回调函数的应用,例:Spring中的HibernateTemplate类中就有用到。于是在网上查了一下关于回调函数的资料,很多都是举打电话的例子来解释java中的回调函数,我看完之后,还是不太明白其中回调的含义。下面是我对回调函数的理解

class A 是做主板的,class B 是做CPU的,突然有一天class A想自己组装电脑,于是就找到B谈判,A提供主板给B,由B负责将其组装起来然后给A,于是双方签订了一个协议(即定义一个接口CompCallback),接口中定义了生产内存、显卡、网卡等方法并由B去实现。class A给自己增加了一个获得电脑的方法,该方法有一个CompCallback(双方的协议)参数。class A拿出自己生产的主板,便把class B叫来,要求B带着双方定的协议(CompCallback)去会合。双方见面之后A把自己生产的主板交给B并跟B说我的主板给你了,任务已经完成了,组装的事就由你去完成。B对A说:好的,我现在回去把这些配件组装好便拿过来给你,(B回调自己的方法)B便回去调用自己的方法开始组装电脑。代码实现如下:

public interface CompCallBack<T> {

T doinComputer(MainBoard mainBoard);

}

public class A {

MainBoard productMainBoard(){

return new MainBoard();

}

<T> T executeCallB(CompCallBack<T> compcallback){

System.out.println("================A开始准备 MainBoard ============");

MainBoard mainBoard=productMainBoard();

//此时A提供主板给B,B拿着主板回调自己的doinComputer方法和其它的方法

return compcallback.doinComputer(mainBoard);

}

public Computer getComputer(){

//A把B(B必须要带着双方的协议才能通过)叫过来,并要B把电脑组装好之后再给A

return (Computer)executeCallB(new B()); 

}
//此处用内部类实现(),也可用匿名内部类
class B implements CompCallBack<Object>{

   public B(){

System.out.println("================调用B============");

   }

public Object doinComputer(MainBoard mainBoard) {

Memory memory=productMemory();

NetWorkCard netWorkCard=productNetWorkCard();

VideoCard videoCard=productVideoCard();

return fittingComp(mainBoard,memory,netWorkCard,videoCard);

}

public Memory productMemory(){

return new Memory();

}

public NetWorkCard productNetWorkCard(){

return new NetWorkCard();

}

public VideoCard productVideoCard(){

return new VideoCard();

}

public Computer fittingComp(MainBoard mainBoard,Memory memory,NetWorkCard netWorkCard,VideoCard videoCard){

System.out.println("================开始组装电脑============");

Computer computer=new Computer();

computer.setMainBoard(mainBoard);

computer.setMemory(memory);

computer.setNetWorkCard(netWorkCard);

computer.setVideoCard(videoCard);

System.out.println("================电脑组装完成============");

return computer;

}

}

}

public class Computer {
private MainBoard mainBoard;
private Memory memory;
private NetWorkCard netWorkCard;
private VideoCard videoCard;
public MainBoard getMainBoard() {
return mainBoard;
}
public void setMainBoard(MainBoard mainBoard) {

this.mainBoard = mainBoard;

}
public Memory getMemory() {

return memory;

}
public void setMemory(Memory memory) {

this.memory = memory;

}
public NetWorkCard getNetWorkCard() {

return netWorkCard;

}
public void setNetWorkCard(NetWorkCard netWorkCard) {

this.netWorkCard = netWorkCard;

}
public VideoCard getVideoCard() {

return videoCard;

}
public void setVideoCard(VideoCard videoCard) {

this.videoCard = videoCard;

}
}

public class MainBoard {

public MainBoard(){

}

}

public class Memory {

}

public class NetWorkCard {

}

public class VideoCard {

}

public class TestCompCall {

public static void main(String args []){

A a=new A();

a.getComputer();

}

}

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 成长之路 设计师:Amelia_0503 返回首页