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

回调在现实生活中最简单的例子就是:假设你公司的总经理出差前需要你帮他办一件事情,这件事情你需要花些时间去做,这时候总经理肯定不能守着你做完再出差把,于是就告诉你他的手机号码叫你但如果事情办完了,你就打电话告诉他一声。这是一个现实生活中的例子。在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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值