回调函数

自己对回调函数的理解:

首先顶一个回调函数的接口:

/**
*

  • @author dch

*/
//定义一个回调函数的接口
public interface ICallback {

//定义一个方法
public void service();

}

/**
*

  • @author dch

*/
//定义一个类来实现回调接口
public class Method1 implements ICallback {

@Override
//重写接口的方法
public void service() {
	// TODO Auto-generated method stub
	System.out.println("男老板说:我知道了,你可以休息了!");
	
}

}

/**
*

  • @author dch

*/

//定义第二个类来实现回调接口
public class Method2 implements ICallback{

@Override
public void service() {
	// TODO Auto-generated method stub
	System.out.println("女老板说:我知道了,你下班吧!");
}

}

定义一个控制器:

import java.util.Scanner;

/**
*

  • @author dch

*/
//定义一个控制器
public class Controller {

//定义需要调用对象的引用,通常用接口
private ICallback iCallback = null;
//有参构造器
public Controller(ICallback iCallback){
	this.iCallback = iCallback;
}

public void showInfo(){
	//当满足条件是.调用接口的方法
	Scanner sc = new Scanner(System.in);
	System.out.println("0:报告男老板我做完了, 1:报告女老板我做完了");
	String type = sc.nextLine();
	System.out.println(type);
	if(type.equals("0")){
		iCallback.service();
	}else{
		iCallback.service();
	}
}

}

测试类:
/**
*

  • @author dch

*/
//测试类
public class Test {

public static void main(String[] args) {
	Controller controller =new Controller(new Method1());
	controller.showInfo();
	
	Controller controller2 = new Controller(new Method2());
	controller2.showInfo();
	
	System.out.println();
	System.out.println("我任务完成了");
	System.out.println();
	//员工不知道这个老板的名字
	ICallback nullname = new ICallback() {
		
		@Override
		public void service() {
			// TODO Auto-generated method stub
			System.out.println("辛苦了,你可以下班了,一路小心!");
		}
	};
	nullname.service();
}
/*
 * 回调函数的理解:
 * 
 *首先定义一个回调方法的接口,是为了完后任务后,能再一次告诉布置任务的人;
 *这里的method1指的就是老板1,method2指的就是老板2....,依次类推
 *Controller类中
 *首先不管什么对象创建,进来后都变成接口对象,所以先创建了私有的成员变量ICallback
 *也就是用到了构造器,传进来的对象都变成接口的实现类对象,
 *当然我们知道接口是不能new(创建对象)的,但是实现接口的类,却是可以new的,
 *从而返回到你自己想返回的老板手中,如果就一个老板,那么就一个,如果有多个,就在判断.
 *例如这个代码
 *Controller controller =new Controller(new Method1());
 *其实这个就是接口对象,只不过我说的接口对象指的是实现接口的Method1类所实例化的对象
 *可以理解为
 *Method1 contriller = new Method1();
 *这里就是工作完成后告诉老板1,
 *这时候我们就能调用方法,因为此时我们有了对象
 *controller.showInfo();
 *调用的过程:
 *public void showInfo(){
 *
 *员工工作
 *iCallback.service();//回调了
 *}
 *public void service() {
	// TODO Auto-generated method stub
	System.out.println("男老板说:我知道了,你可以休息了!");
	
}
 *输出:男老板说:我知道了,你可以休息了!
 *这样实现了回调,员工在完成任务后,又能告诉老板,老板不仅知道了,还给了反馈.
 *
 *思考:
 *如果员工完成任务后,不知道要把完成的消息给谁,
 *这里是不是可以来个匿名类,
 *反正无论是谁都只是要接收到员工完成任务这一个方法.
 *
 */

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值