代理模式(Proxy)概念:
为其他对象提供一种代理以控制对这个对象的访问.
--------------------------代理模式应用:
1.远程代理,也就是为一个对象在不同的地址空间提供局部代表.这样可以隐藏一个对象存在于不同地址空间的事实.
2.虚拟代理,是根据需要创建开销很大的对象.通过它来存放实例化需要很长时间的真实对象.
3.安全代理,用来控制真实对象访问时的权限,一般用于对象应该有不同的访问权限的时候
4.智能指引,是指当调用真实的对象时,代理处理另外一些事.
我这里举的例子结构如下:
>首先有一个总经销商:LocalProxy
>然后我们需要一个低级经销商GoodsProxy
>我们还需要一个柜台去替低级经销商代理商品摆放ShopProxy
代指总经销商,里面提供了很多种物品购买的方法,这些商品都属于总经销商,总经销商只提供接口进货,他并不知道你卖多少钱,当然他也不是很关心你卖给谁 public interface GoodsProxy { //得到食物 void getFood(); //得到生活用品 void getSupplies(); //得到娱乐用品 void getToy(); }
上面的是"中间人"类,他只提供接口做商品代理,商品不用他自己造
普通经销商类,指的实代理过程中的中间人,价格是由他来定的 public class LocalProxy implements GoodsProxy{ private final String TAG = LocalProxy.class.getSimpleName(); private String name; private double price; public LocalProxy(String name,double price){ this.name = name; this.price = price; } @Override public void getFood() { Log.d(TAG, "看到了"+name +"售价:"+ price +"打算购买!!"); } @Override public void getSupplies() { Log.d(TAG, "看到了"+name +"售价:"+ price+"打算购买!!"); } @Override public void getToy() { Log.d(TAG, "看到了"+name +"售价:"+ price+"打算购买!!"); } }
这个注释写的很显而易见了大意就是普通经销商定的价格
类似于普通经销商的柜台,顾客一去就能看到商品的价格 public class ShopProxy implements GoodsProxy{ private final String TAG = ShopProxy.class.getSimpleName(); private GoodsProxy mGoodsProxy; public ShopProxy(GoodsProxy goodsProxy){ this.mGoodsProxy = goodsProxy;} @Override public void getFood() { Log.d(TAG, "searching"); mGoodsProxy.getFood(); Log.d(TAG, "search finished"); } @Override public void getSupplies() { Log.d(TAG, "searching"); mGoodsProxy.getSupplies(); Log.d(TAG, "search finished"); } @Override public void getToy() { Log.d(TAG, "searching"); mGoodsProxy.getToy(); Log.d(TAG, "search finished"); }
这里面实际执行的是传进来的抽象类的实现类调用的方法,也就是普通经销商定价的一个过程,具体看调用
private GoodsProxy mGoodsProxy;//创建一个普通经销商的对象 mGoodsProxy = new ShopProxy(new LocalProxy("清扬洗发水", 23)); Log.d("ProxyActivity", "正在思考要买什么用的?"); mGoodsProxy.getSupplies(); Log.d("ProxyActivity", "买了清扬洗发水");
log日志显示如下图
可以看到中间人代理很成功,GoodsProxy通过代理商把商品卖出去了,这就是代理模式的一种思想,提供者只负责提供你怎么用用在哪儿他并不关心,用户也只在乎到手的产品,他不会关心产品到底是哪儿产的,出厂价多少,通过代理ShopProxy来定制规则(比如售价...),对部分内容做修改.