如何正确使用第三方的sdk(代理模式)

在安卓开发中使用第三方sdk这是必不可少的环节,大多sdk在我们一番研究后基本可以实现其功能,但是如何正确优雅的使用第三方sdk呢。
下面就通过代理模式使用sdk让大家明白如何正确的使用第三方sdk:其优点主完全贯穿了高内聚低耦合,下面我通过网络请求的功能作为例子来说明。

1,功能的起始点main,一个简单的按钮

public class MainActivity  extends Activity {
    private  Map<String, Object> parm = new HashMap<>();
    @Override
    protected void onCreate( Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //一个简单的按钮作为一切功能的起始点
        findViewById(R.id.tv_tv).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
            MyProxy.obtion().get("http://192.168.1.129/hangban.txt", parm, new CallBack() {
                @Override
                public void onSuccess(Object response) {
                    LogTools.logi("tag",response.toString());
                }
                @Override
                public void onFailed(String failed) {
                }
            });
            }
        });
    }
}

简单的接口

public interface CallBack<T>{
    void  onSuccess(T response);
    void  onFailed(String  failed);

}

代理类通过接口协议功能

public class MyProxy implements Ihttp{
    //单例模式
    public  static  MyProxy mInstance;
    public MyProxy () {
        mInstance = this;
    }
    public static MyProxy obtion(){
        if (mInstance==null){
            synchronized (MyProxy .class){
                if (mInstance==null){
                    mInstance = new MyProxy ();
                }
            }
        }
        return  mInstance;
    }
    private static Ihttp mIhttp = null;
    //初始化哪种网络框架
    public static void  init(Ihttp ihttp){
        mIhttp = ihttp;
    }
    @Override
    public void post(String url, Map<String, Object> params, CallBack callBack) {
        mIhttp.post( url,  params,  callBack);
    }
    @Override
    public void get(String url, Map<String, Object> params, CallBack callBack) {
        mIhttp.get(url, params,  callBack);
    }
}

协议接口,统一代理类和model类的功能

public interface Ihttp {
    public void post(String url , Map<String ,Object> params,CallBack callBack);
    public void get(String url , Map<String ,Object> params,CallBack callBack);
}

网络框架实现类更换框架只需更换一个mode类即可,凡是第三方sdk皆可使用此模式

public class NetworkMode<T> implements Ihttp {
    public static OkHttpClient okHttpClient;
    public static NetworkMode instance;
    public NetworkMode(Context context) {
        instance = this;
    }
    public static NetworkMode getInstance(Context context){
        if (instance==null){
            synchronized (NetworkMode.class){
                if (instance==null){
                    instance = new NetworkMode(context);
                }
            }
        }
        return instance;
    }
    @Override
    public void post(String url, Map<String, Object> params, CallBack callBack) {
        RequestBody formBody = new FormBody.Builder()
                .add("key", params.toString())
                .build();
        Request request = new Request.Builder()
                .url(url)
                .post(formBody)
                .build();
        Response response = null;
        try {
            response = okHttpClient.newCall(request).execute();

        if (response.isSuccessful()) {
            callBack.onSuccess( response.body().string());
        } else {
            throw new IOException("Unexpected code " + response);
        }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Override
    public void get(String url, Map<String, Object> params, CallBack callBack) {
        LogTools.logi("tag","xturl="+url);
        okhttp3.Request request = new okhttp3.Request.Builder().url(url).get().build();
        OkHttpClient okHttpClient = new OkHttpClient();
        final Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

                LogTools.logi("tag", "onFailure: " + e.getMessage().toString());
            }

            @Override
            public void onResponse(Call call, okhttp3.Response response) throws IOException {
//                callBack.onSuccess(response.body().string());
                LogTools.logi("tag", "response: " + response.body().string());
            }
        });
    }
}

使用之前初始化代理类即可

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        MyProxy.init(NetworkMode.getInstance(getApplicationContext()));
        //只需一步即可跟换框架
//       MyProxy.init(retrofitNetworkMode.getInstance(getApplicationContext()));
    }
}

可以写多个,多种框架的mode,在开发中只需导入一行代码初始化即可更换sdk,

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容