代理模式:
- 一个公共接口
- 代理类和被代理都是实现这共同的接口
- 代理类中持有被代理类的引用
网络框架举例:
共同的接口
public interface IRequestProcessor{
void get(String url , Map<String,Object> params,ICallBack callBack);
void post(String url , Map<String,Object> params,ICallBack callBack);
void put(String url , Map<String,Object> params,ICallBack callBack);
void delete(String url , Map<String,Object> params,ICallBack callBack);
}
代理类
public class ProxyHttp implements IRequestProcessor{
//被代理的类 具体实现的请求方式的类
IRequestProcessor mIRequestProcessor;
public static void init(IRequestProcessor requestProcessor ){
mIRequestProcessor = requestProcessor
}
private ProxyHttp(){
}
//单例实现获取ProxyHttp
private static class ProxyHttpHolder {
private static ProxyHttp instance = new ProxyHttp();
}
public static ProxyHttp getInstance(){
return ProxyHttpHolder.instance
}
@Override
public void get(String url , Map<String,Object> params,ICallBack callBack){
mIRequestProcessor.get(url,params,callBack);
}
@Override
public void post(String url , Map<String,Object> params,ICallBack callBack){
mIRequestProcessor.post(url,params,callBack);
}
@Override
public void put(String url , Map<String,Object> params,ICallBack callBack){
mIRequestProcessor.put(url,params,callBack)
}
@Override
public void delete(String url , Map<String,Object> params,ICallBack callBack){
mIRequestProcessor.delete(url,params,callBack);
}
}
具体实现类, 可以用不同框架OKhttp,等其它的网络框架实现
public class OkhttpImpl implements IRequestProcessor{
//省略部分代码
@Override
public void get(String url , Map<String,Object> params,ICallBack callBack){
//省略具体实现代码
}
@Override
public void post(String url , Map<String,Object> params,ICallBack callBack){
//省略具体实现代码
}
@Override
public void put(String url , Map<String,Object> params,ICallBack callBack){
//省略具体实现代码
}
@Override
public void delete(String url , Map<String,Object> params,ICallBack callBack){
//省略具体实现代码
}
}
静态方法
public class RequestFactory {
public static ProxyHttp getProxyHttp() {
return ProxyHttp.getInstance();
}
}
题外话
代理模式是桥接模式一个特例。
代理模式只有一个实现,代理对象和被代理对象实现了统一的口。
桥接模式,变化部分抽象出,可以有多个实现。代理模式用于控制对其实现的访问,而桥接模式允许您动态更改实现