统一管理项目中的接口回调

17 篇文章 0 订阅

0、写在前面

无论是 Java Web 开发还是 Android 开发我们都避免不了异步处理业务的逻辑。有异步的出现一定就有异步结果(接口)的回调。你之前是不是有为每一个异步业务都单独写一个接口呢?如果没有单独写,可以忽略此篇文档。(你已经是大佬了)
项目(业务)大(复杂)了是不是觉得接口太多难以管理呢?本篇文章就是为了解决此问题。

1、封装全局的回调接口

涉及到的姿势
1、泛型灵活使用
2、线程安全的单例模式
3、WeakHashMap 弱键值对引用缓存回调接口

/**
 * 异步回调(结果)接口
 */
public interface IGlobalCallback<T> {
    void executeCallback(@Nullable T args);
}
/**
 * 统一管理项目中的回调
 */
public class CallbackManager {
    private static final WeakHashMap<Object, IGlobalCallback> CALLBACKS = new WeakHashMap<>();

    /**
     * 静态类部类实现单例
     */
    private static class Holder {
        private static final CallbackManager INSTANCE = new CallbackManager();
    }

    public static CallbackManager getInstance() {
        return Holder.INSTANCE;
    }

    /**
     * 添加全局回调
     * @param tag
     * @param callback
     * @return
     */
    public CallbackManager addCallback(Object tag, IGlobalCallback callback) {
        CALLBACKS.put(tag, callback);
        return this;
    }

    /**
     * 获取指定回调的接口
     * @param tag
     * @return
     */
    public IGlobalCallback getCallback(Object tag) {
        return CALLBACKS.get(tag);
    }
}
/**
 * 回调Key的枚举,方便存取回调接口
 */
public enum CallbackType {
    WX_PAY,
    ALI_PAY
}

2、测试接口回调

@OnClick(R.id.id_icon_ib)
    void  iconButton(){
        Toast.makeText(getApplicationContext(), "iconButton", Toast.LENGTH_SHORT).show();
        //先全局CallbackManager中添加回调
        CallbackManager.getInstance().addCallback(CallbackType.WX_PAY, new IGlobalCallback<String>() {
            @Override
            public void executeCallback(@Nullable String args) {
                Toast.makeText(getApplicationContext(), args, Toast.LENGTH_SHORT).show();
            }
        });

        //延迟发送消息模拟异步耗时操作
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                IGlobalCallback callback = CallbackManager.getInstance().getCallback(CallbackType.WX_PAY);
                if (callback !=null){
                    callback.executeCallback("微信支付测试回调");
                }
            }
        },3000);
    }

更过多好玩炫酷的封装参考视频:http://coding.imooc.com/class/116.html

推荐阅读
android-iconify 使用详解
10分钟用Jitpack发布开源库
微信、支付宝App支付
IJPay让支付触手可及

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值