Android 别人那里学习到的回调机制

来源:互联网 发布:windows无法识别u盘 编辑:程序博客网 时间:2024/05/21 07:01

回调在现实生活中最简单的例子就是:假设你公司的总经理出差前需要你帮他办一件事情,这件事情你需要花些时间去做,这时候总经理肯定不能守着你做完再出差把,于是就告诉你他的手机号码叫你但如果事情办完了,你就打电话告诉他一声。这是一个现实生活中的例子。在Android程序和Java程序中也会经常使用到这种回调机制,下边给大家说一下详细的代码:


//Manager 经理类public class Manager{    public Manager(Personal personal){          personal.doSomething(this,"整理文件");       }    //当员工做完总经理让他做的事后,就通过该方法通知总经理     public void phoneCall(String result){         System.out.println("事情:"+result);     }}


Manager类是哥模拟总经理的类,当该类的对象被造出来后就会通过Personel对象去执行Personnel中的doSomething方法告诉员工做些什么Personal的代码如下:


//personal的代码如下:public class Personal{    public void doSomething(Manager manager, String task){           System.out.println("总经理吩咐的任务:"+task);           String result="做完了";           //做完之后我们需要通过总经理公布的poneCall方法通知总计里结果。          manager.phoneCall(result);     }}


//总经理通过调用Personal中的doSomething方法告诉员工该做些什么,当员工做完后就通过Manager中的phoneCall方法通知总经理结果。//Main方法的代码如下public class Main{     //首先我们需要一个员工     Personal  personal=new Personal();     //其次我们把这个员工指派给总经理     new Manager(personal);}

满足回调的两个基本的条件:

1. Class  A 调用Class B的X 方法

2. Class B中X方法执行的过程中调用Class A中的Y方法完成回调。


上边的这个例子非常的好理解,但是问题来了,如果总经理出差前交代了事情给我去搬,不巧,副总经理也要给我件事情去办,更无耻的是.....主管也发任务过来了,都要求说做完就打电话通知他们, 这是我们就要定义更多的类,什么总经理类,经理类,主管类,等非常多的类,但是这些类都要求做完事情就电话通知他们,每一个类都会有一个类似poneCall的方法作为回调方法,这时,我们利用面向对象的思想来看,是不是可以把这个回调方法抽象出来作为i一个独立的抽象类或接口呢。这也就是多态的思想,我们定义一个名为CallBack的接口作为回调接口,在该接口下定义一个名为backResult抽象方法作物回调方法。让总经理和经理都去实现这个接口。这样才能真正的体现回调,多态,接口的定义。

下面来改正一下代码:

 

//回调接口public interface CallBack{     //回调方法     public void backResult(String result)}

Manager类的改造方法如下:

//Manager类,用来模拟总经理public class Manager implements CallBack{     public Manager(Personal personal){          //想让员工做什么          personnel.doSomething(this, "整理公司文件");    }    //当员工做完总经理让他做的事后就通过该方法通知总经理   public void backResult(String result){       System.out.println("事情:"+reslut);   }}


Personal 代码改造以后如下:

doSomething方法不再传入一个Manager对象而是一个CallBack接口://该类用来模拟员工public class  Personal{     public void doSomething(Callback callBack, String task){             //总经理通过doSomething方法告诉员工要做什么                System.out.println("总经理要你做"+task);                String  result="做完了";                //当事情做完了我么就通过总经理公布的phoneCall方法通知总经理结果                callBack.backResult(result);      }}


这就是所谓的回调的神秘算法之处。我是完全明白了。


0 0