設計模式—代理模式

今天我們來學習一種結構型模式,代理模式(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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,869評論 18 139
  • 意圖 為其他對象提供一種代理以控制對這個對象的訪問 代理模式通過代理目標對象,把代理對象插入到客戶和目標對象之間,...
    tomas家的小撥浪鼓閱讀 696評論 0 1
  • 原文地址:LoveDev 代理模式(Proxy Pattern):給某一個對象提供一個代理或占位符,并由代理對象來...
    KevinLive閱讀 302評論 0 0
  • 風來了 它的葉子就活了 柔軟、輕靈 每一片都歡欣鼓舞 旋轉成一支支綠色風車 每一片都飽含熱淚 匯聚成天空的粼粼綠波...
    白陽閱讀 489評論 2 2
  • 如果你給我一個擁抱,我會回你一個親吻。 2017年 10月 9日 星期一 陰雨 1. 我最好的朋友筱涼曾經問過我想...
    素智閱讀 3,285評論 87 110