今天我們來學習一種結構型模式,代理模式(Proxy Pattern)。
模式定義
給某一個對象提供一個代理,并由代理對象控制對原對象的引用。
模式結構
代理模式包含如下角色:
**AbstractObject: ** 抽象角色
**ProxyObject: ** 代理角色
**RealObject: ** 真實角色
UML圖
代碼實現
AbstractObject.java
·``` bash
/**
-
抽象角色
*/
public interface AbstractObject {void operation();
}
### RealObject.java
``` bash
/**
* 真實角色
*/
public class RealObject implements AbstractObject{
@Override
public void operation() {
System.out.println("RealObject do SomeThing");
}
}
ProxyObject.java
/**
* 代理角色
*/
public class ProxyObject implements AbstractObject {
private RealObject mRealObject =new RealObject();
@Override
public void operation() {
System.out.println("Before operation");
mRealObject.operation();
System.out.println("After operation");
}
}
測試類
public class MyClass {
public static void main(String[] args) {
AbstractObject abstractObject = new ProxyObject();
abstractObject.operation();
}
}
運行結果
代理模式的優點
代理模式能夠協調調用者和被調用者,在一定程度上降低了系 統的耦合度。
遠程代理使得客戶端可以訪問在遠程機器上的對象,遠程機器 可能具有更好的計算性能與處理速度,可以快速響應并處理客戶端請求。
虛擬代理通過使用一個小對象來代表一個大對象,可以減少系 統資源的消耗,對系統進行優化并提高運行速度。
保護代理可以控制對真實對象的使用權限。
代理模式的缺點
由于在客戶端和真實主題之間增加了代理對象,因此 有些類型的代理模式可能會造成請求的處理速度變慢。
實現代理模式需要額外的工作,有些代理模式的實現 非常復雜。
參考
http://design-patterns.readthedocs.io/zh_CN/latest/structural_patterns/proxy.html