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

简介: 0、写在前面无论是 Java Web 开发还是 Android 开发我们都避免不了异步处理业务的逻辑。

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让支付触手可及

目录
相关文章
|
关系型数据库 MySQL API
不同项目下如何进行快速的对接(其中一种方法)
不同项目下如何进行快速的对接(其中一种方法)
79 0
|
存储 数据库
13activiti - 流程管理定义(部署流程定义)
13activiti - 流程管理定义(部署流程定义)
72 0
|
3月前
|
开发工具 Android开发
Android项目架构设计问题之外部客户方便地设置回调如何解决
Android项目架构设计问题之外部客户方便地设置回调如何解决
28 0
|
5月前
|
前端开发 数据库 JavaScript
基于Flowable的流程挂接自定义业务表单的设计与实践
文章讨论了如何在Flowable流程引擎中挂接自定义业务表单,以及相关设计和实践的步骤。文章中包含了一些前后端代码示例,如Vue组件的模板和脚本部分,这些代码用于实现与Flowable流程引擎交互的界面。例如,有一个按钮组件用于提交申请,点击后会触发applySubmit方法,该方法会与后端API进行交互,处理流程启动、查询关联流程等逻辑。
49467 11
|
6月前
|
移动开发 前端开发
基于若依的ruoyi-nbcio流程管理系统中自定义业务流程发布动态更新业务流程关联信息
基于若依的ruoyi-nbcio流程管理系统中自定义业务流程发布动态更新业务流程关联信息
122 2
|
6月前
|
前端开发
基于jeecgboot流程管理平台的自定义业务表单集成方法
基于jeecgboot流程管理平台的自定义业务表单集成方法
167 0
|
6月前
|
监控 项目管理
问题管理的方法
问题管理的方法
109 0
问题管理的方法
|
Java 数据库 微服务
微服务项目:尚融宝(36)(核心业务流程:用户绑定(1))
尚融宝应该在网站引导客户在“资金托管平台“开设账户。也就是说投资人和借款人必须在资金托管平台页面上自主开户,与尚融宝建立对应的账户体系。
微服务项目:尚融宝(36)(核心业务流程:用户绑定(1))
|
前端开发 数据库 微服务
微服务项目:尚融宝(37)(核心业务流程:用户绑定(2))
微服务项目:尚融宝(37)(核心业务流程:用户绑定(2))
微服务项目:尚融宝(37)(核心业务流程:用户绑定(2))
下一篇
无影云桌面