代理模式(Proxy)概念:
為其他對象提供一種代理以控制對這個對象的訪問.
--------------------------代理模式應用:
1.遠程代理,也就是為一個對象在不同的地址空間提供局部代表.這樣可以隱藏一個對象存在于不同地址空間的事實.
2.虛擬代理,是根據需要創(chuàng)建開銷很大的對象.通過它來存放實例化需要很長時間的真實對象.
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"); }
這里面實際執(zhí)行的是傳進來的抽象類的實現(xiàn)類調用的方法,也就是普通經銷商定價的一個過程,具體看調用
private GoodsProxy mGoodsProxy;//創(chuàng)建一個普通經銷商的對象 mGoodsProxy = new ShopProxy(new LocalProxy("清揚洗發(fā)水", 23)); Log.d("ProxyActivity", "正在思考要買什么用的?"); mGoodsProxy.getSupplies(); Log.d("ProxyActivity", "買了清揚洗發(fā)水");
log日志顯示如下圖
可以看到中間人代理很成功,GoodsProxy通過代理商把商品賣出去了,這就是代理模式的一種思想,提供者只負責提供你怎么用用在哪兒他并不關心,用戶也只在乎到手的產品,他不會關心產品到底是哪兒產的,出廠價多少,通過代理ShopProxy來定制規(guī)則(比如售價...),對部分內容做修改.