1.Class A调用Class B中的X方法
2.ClassB中X方法执行的过程中调用Class A中的Y方法完成回调
一切看上去都很完美~以上例子代码简单通俗地描述了回调,但是这里我就会有这样一个疑问:假设总经理出差前交了件事情给我去办,不巧……副总经理也要给我件事去办,更无耻的是……主管也发任务过来了,都要求说做完就打电话通知他们……这时我们就要定义更多类,什么总经理类啦~经理类啦~主管类啦~杂七杂八的类,但是这些杂七杂八的大爷们都要求做完事情就电话通知,每个类都会有一个类似phoneCall的方法作为回调方法,这时,我们利用面向对象的思想来看~是不是可以把这个回调方法抽象出来作为一个独立的抽象类或接口呢?多态的思想油然而生~~~鉴于JAVA接口的好处,我们就定义一个名为CallBack的接口作为回调接口,再在该接口下定义一个名为backResult的抽象方法作为回调方法,让那些总经理类啦~经理类啦~主管类啦~什么的都去实现该接口,这时候我们就来改造下我们的项目:
CallBack代码如下:
- package com.aige.test;
- /**
- * @description 回调接口
- * @author Aige
- * @since 2014/11/6
- */
- public interface CallBack {
- // 回调方法
- public void backResult(String result);
- }
Manager代码改造后如下:
实现CallBack接口重写backResult方法
- package com.aige.test;
- /**
- * @description 该类用来模拟总经理
- * @author Aige
- * @since 2014/11/6
- */
- public class Manager implements CallBack {
- /**
- * @param personnel
- * 传入一个员工类的对象
- */
- public Manager(Personnel personnel) {
- // 想让该让员工做什么
- personnel.doSomething(this, "整理公司文件");
- }
- /**
- * @description 当员工做完总经理让他做的事后就通过该方法通知总经理
- * @param result
- * 事情结果
- */
- public void backResult(String result) {
- System.out.println("事情" + result);
- }
- }
Personnel代码改造后如下:
doSomething方法不再传入一个Manager对象而是一个CallBack接口:
- package com.aige.test;
- /**
- * @description 该类用来模拟员工
- * @author Aige
- * @since 2014/11/6
- */
- public class Personnel {
- public void doSomething(CallBack callBack, String task) {
- // 总经理通过doSomething方法告诉员工要做什么
- System.out.println("总经理要你做" + task);
- String result = "做完了";
- // 当事情做完了我们就通过总经理公布的phoneCall方法通知总经理结果
- callBack.backResult(result);
- }
- }
至此,回调的基本概念差不多就是这样了~其实回调真心不难理解,但是回调在Android中相当重要,几乎处处可见回调机制,如果你能理解到回调的奥秘~我相信对你的Android技术是一个不小的提升~~吃药去了!