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

原创 2017年07月30日 23:19:02

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

版权声明:本文为博主原创文章,欢迎转载,转载标明出处(http://blog.csdn.net/zyw_java)。微信公众号:javenlife

电商系统如何调用支付宝接口代码,以及支付宝如何返回处理结果。

之前讲过与paypal在线支付的接口通信,paypal接口主要用于国际电子商务,而国内的电子商务,目前而言一般会考虑阿里巴巴的支付宝,下面将详细讲述如何在自己的系统中集成支付宝接口。 关于支付宝...
  • u010523770
  • u010523770
  • 2017年03月19日 12:37
  • 1618

java开源项目CrapApi接口管理系统

CrapApi 应用接口管理,后台开发语言为java,主要技术:anjularjs、bootstrap、springMVC、hibernate、maven Application Programmi...
  • torrytang
  • torrytang
  • 2016年04月03日 19:35
  • 6352

android 项目中使用到的网络请求框架以及如何配置好接口URL

android 项目中使用到的网络请求框架以及如何配置好接口URL
  • coderinchina
  • coderinchina
  • 2015年06月12日 09:32
  • 1246

使用config.gradle统一管理项目的依赖库

当你看着你module中build.gradle躺着各种乱七八糟的依赖库时候是不是顿生无力感,想整理又不知道怎么有条有序,整理好又好怕再添加新的库的时候不知道放到哪里,好吧,这就是我的想法, 所...
  • qq_35598366
  • qq_35598366
  • 2017年06月27日 11:42
  • 205

使用gradle的自定义Property实现Android项目的配置和依赖统一管理

使用gradle的自定义Property实现Android项目的配置和依赖统一管理
  • u013651026
  • u013651026
  • 2017年12月08日 17:02
  • 87

使用VS2010的Database 项目模板统一管理数据库对象

Visual Studio 2010 有一个数据库项目模板:Visual Studio Database Project(以下简称VSDP),VS 2003/2005/2008也有类似的项目,在VS2...
  • zhaoyh0530
  • zhaoyh0530
  • 2010年12月31日 17:42
  • 531

[开源学习_MeiZhi]使用config.gradle统一管理项目的依赖库

[开源学习]使用config.gradle统一管理项目的依赖库源码片段来源: drakeet的MeiZi 项目. https://github.com/drakeet/Meizhi如何配置新建con...
  • maxwell0401
  • maxwell0401
  • 2016年08月06日 09:50
  • 2344

统一管理log类,以及我们项目编程的时候应该更多的像这样封装起来!

封装一些,我们比较常见的常量,经常使用的操作,都可以使用类封装起来提供给我们的自己使用。 比如Logcat...
  • u012881904
  • u012881904
  • 2015年09月16日 19:13
  • 267

【Unity技巧】统一管理回调函数——观察者模式

这次的内容有点类似设计模式里的观察者模式。但是和常规意义上的观察者模式也不是完全一致,所以各位就不要咬文嚼字啦!咦?设计模式?!不懂!没关系,说不定你以前就用过。 开场白 我们来想...
  • andyhebear
  • andyhebear
  • 2015年08月04日 16:15
  • 515

【Unity】中如何统一管理回调函数(利用观察者模式)

这次的内容有点类似设计模式里的观察者模式。但是和常规意义上的观察者模式也不是完全一致,所以各位就不要咬文嚼字啦!咦?设计模式?!不懂!没关系,说不定你以前就用过。 开场白 ...
  • swj524152416
  • swj524152416
  • 2017年02月09日 18:33
  • 1268
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:统一管理项目中的接口回调
举报原因:
原因补充:

(最多只允许输入30个字)