Andoird回调原理

      网上也有很多这方面的资料,但是自身理解才最重要,为了加深印象自己分析举例来理解。

      百度概念一大堆,所以不想在这里做任何叙述,这里借助一个现实生活示例,贷款人向银行工作人员贷款的过程来解释回调原理。

     基本流程:

                     1.需要贷款的人先向银行发起贷款的申请(注册回调事件)

                     2.这里有个回调的共性,调用对象需要处理完数据之后才能通过回调方法传递数据。例如:要等到银行工作人员处理好手续之后,才能把贷款金通过贷款人事先约定好的方法(回调方法)把贷款借给他。

这里有个疑问?贷款人有个收钱的方法,那么这个方法其实我们可以不用定义接口,银行工作人员回调的时候直接 new Workers().collectMoney()方法实现的,这样他也实现了回调。但是为什么要用接口呢?这里牵扯到一个抽象的概念,把它抽成接口,不管是那个类型的人,只要实现了收钱的接口都会有收贷款金的功能了。这样代码的扩展性和灵活性得到了提升。

---------------------------------------------------------------------------------------------------------------------------

回调不匿名的实现:

public interface CollectMoneyCallback {
    //抽取贷款人收钱的方法
    void collectMoney(int money);
}
//工人实现了接受贷款的功能
public class Workers implements CollectMoneyCallback {
    //工人向银行贷款
    public void borrowBankMoney(int money){
        new BankStaff().borrowMoney(money,this)
    }

    @Override
    public void collectMoney(int money) {
        System.out.println("工人收到了银行" + money + "元贷款金");
    }
}
//老板实现了接收贷款的功能
public class Boss implements CollectMoneyCallback {
    //老板向银行贷款
    public void borrowBankMoney(int money){
        new BankStaff().borrowMoney(money,this)
    }

    @Override
    public void collectMoney(int money) {
        System.out.println("老板收到了银行" + money + "元贷款金");
    }
}
//银行工作人员
public class BankStaff{
    //贷款
    public void borrowMoney(int money,CollectMoneyCallback callback){
        //工作人员办理了手续拿到了贷款的钱
        int loansMoney = handle(money);
        //通过回调给了贷款的人
        callback.collectMoney(loansMoney);
    }

    /**
     * 办理贷款手续
     * @param money 办理的金额
     * @return 放款的金额
     */
    public void handle(int money){
        int mMoney;//放款的金额
        if(money == null) return mMoney;
        mMoney = money;
        System.out.println("办理完" + money + "元贷款手续");
        return result;
    }
}
//测试类
public class Test {
    public void test(){
        new Workers().borrowBankMoney(20000);
        new Boss().borrowBankMoney(500000);
    }
}

回调匿名的实现:

public interface CollectMoneyCallback {
    //抽取贷款人收钱的方法
    void collectMoney(int money);
}
//银行工作人员
public class BankStaff{
    public CollectMoneyCallback callback;

    public void setCallback(CollectMoneyCallback callback) {
        this.callback = callback;
    }

    //贷款
    public void borrowMoney(int money,CollectMoneyCallback callback){
        //工作人员办理了手续拿到了贷款的钱
        int loansMoney = handle(money);
        //设置回调监听
        setCallback(callback);
        //通过回调给了贷款人钱
        performCollectMoneyCallback(money)
    }

    /**
     * 办理贷款手续
     * @param money 办理的金额
     * @return 放款的金额
     */
    public void handle(int money){
        int mMoney;//放款的金额
        if(money == null) return mMoney;
        mMoney = money;
        System.out.println("办理完" + money + "元贷款手续");
        return result;
    }

    //执行首先回调
    public void performCollectMoneyCallback(int money){
        if (callback != null){
            System.out.println("银行工作人员放贷" + money + "元");
            callback.collectMoney(money);
        }
    }
}
//测试类
public class Test {

    public void test(){
        new BankStaff().borrowMoney(2000, new CollectMoneyCallback() {
            @Override
            public void collectMoney(int money) {
                System.out.println("老板张三收到了银行工作人员" + money + "元贷款金");
            }
        });
        new Lisi2().returnMoney(50000,callback);
    }

    CollectMoneyCallback callback = new CollectMoneyCallback() {
        @Override
        public void collectMoney(int money) {
            System.out.println("员工李四收到了银行工作人员" + money + "元贷款金");
        }
    };
}

最后的话:纯属个人分析理解,如果有什么不对欢迎指正,如果对你进行了帮助那就皆大欢喜啦,如果有愿意讨论分析各种andoird技术可以与我联系,谢谢观看。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值