静态代理模式

例子:比如:A要去买房,找中介。中介卖给A一套房。

开始分析

1.中介里肯定有一个对象把房卖给了A,暂且定义这个真正卖房给A的人叫B;

2.中介和B都有一个职能,就是卖房;所以抽象出来的接口中 就有了一个 卖房的方法;

3.中介和B 都实现了这个接口

4.中介中实现这个接口的方法肯定是调的B的方法。

5.所以中介这个类中 应该含有一个B的对象,因为B实现了接口,所以应该定义一个接口类型的属性。

6.属性提供一个设置值的方法,这样可以动态的改变交易的对象。

7.A不关心到底中介找的谁要的房子,他只要达到买房的目的就行了。

缺点:如果接口方法需要扩展,那么所有实现类都要更改

优点:切换同一级别的真实实现类,很方便。一般的网络请求、图片加载由于框架层出不穷,通过此方法,可以达到不同框架的完美切换

如下附赠:网络框架切换

public interface ICallBack {

    void OnSuccess(String result);

    void OnFailure(String fail);
}

// 请求完成后回调部分对于返回值的处理类
public abstract class HttpCallBack<T> implements ICallBack {


    @Override
    public void OnSuccess(String result) {
        Class<?> clz = analysisClassInfo(this);
        T o = (T) GsonUtil.getInstance().fromJson(result, clz);
        onSuc(o);
    }

    public abstract void onSuc(T t);

    // 反射拿到当前类的泛型class 
    // 方便gson转换
    private Class<?> analysisClassInfo(Object o) {
        Type type = o.getClass().getGenericSuperclass();
        ParameterizedType parameterizedType = (ParameterizedType) type;
        Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
        return (Class<?>) actualTypeArguments[0];
    }

    @Override
    public void OnFailure(String fail) {

    }
}

// 抽取公共部分
public interface IHttpProcessor {
    void post(String url, HashMap<String, Object> params, ICallBack iCallBack);
}

// 静态代理模式 
public class HttpHelper implements IHttpProcessor {

    private static HttpHelper httpHelper = new HttpHelper();

    // 拥有一个代理对象,所有公共接口实现均有代理对象实现
    private static IHttpProcessor iHttpProcessor;

    private HttpHelper(){}

    public static HttpHelper getInstance(){
        return httpHelper;
    }

    // 方便不同网络框架切换 
    public static void init(IHttpProcessor httpProcessor) {
        iHttpProcessor = httpProcessor;
    }

    @Override
    public void post(String url, HashMap<String, Object> params, ICallBack iCallBack) {
        iHttpProcessor.post(url,params,iCallBack);
    }


// 具体网络框架
public class VolleyProcessor implements IHttpProcessor {

    @Override
    public void post(String url, HashMap<String, Object> params, ICallBack iCallBack) {

    }
}

最后在整个app运行的初始化阶段 通过 HttpHelper.init(new VolleyProcessor());设置当前的网络框架。当然也可以实现 retrofit、okhttp、okgo等 进行快速切换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值