17 Proxy代理模式(結構型)

17 Proxy(代理,結構型)

    • 動機:
      • 代理模式給某一個對象提供一個代理對象,並由代理對象控制對原對象的引用。
      • 只在必要時生成實例
      • 控制對對象的訪問的一個原因是defer(推遲)創建和初始化的全部成本,直到我們需要使用它。
      • 解決方案是使用另一個對象,代理,作爲真實對象的替身。
      • 也稱爲:Surrogate
    • JAVA RMI是JAVA RPC的版本,RPC如下,通過網絡調用遠端g(),回去研究一下RMI
      • Java RMI: The client helper is a ‘stub’ and the service helper is a ‘skeleton’.
      • Java遠程方法調用,即Java RMI(Java Remote Method Invocation)是Java編程語言裏,一種用於實現遠程過程調用的應用程序編程接口。它使客戶機上運行的程序可以調用遠程服務器上的對象。遠程方法調用特性使Java編程人員能夠在網絡環境中分佈操作。RMI全部的宗旨就是儘可能簡化遠程接口對象的使用。
    • 什麼時候用:
      • 遠程代理爲不同地址空間中的對象提供本地代表。
      • 虛擬代理根據需要創建昂貴的對象。
      • 保護代理控制對原始對象的訪問。
      • 智能引用是一個空指針的替代,空指針在訪問對象時執行額外的操作。
        • 計算對真實對象的引用數量,以便在沒有更多引用時自動釋放(智能指針)。
        • 加載持久對象(持久化對象)到內存的時候第一次引用。
        • 在訪問真實對象之前檢查它是否被鎖定,以確保沒有其他對象可以更改它。
    • 結構:
    • 後果:
      • 遠程代理可以隱藏對象駐留在不同地址空間的事實。
      • 虛擬代理可以執行優化,如按需創建對象。
      • 保護代理和智能引用都允許訪問控制等附加功能。(在適用性頁面顯示)
      • 寫時拷貝:
        • 複製一個大而複雜的對象可能是一項昂貴的操作。如果副本從來沒有被修改過,那麼就沒有必要產生這個成本。通過使用代理來推遲複製過程,我們確保只在對象被修改時才複製它。
    • 擴展:透明代理
      • 代理並不總是需要知道真實主題的類型。
      • 如果一個代理類可以通過一個抽象接口單獨處理它的subject,那麼就不需要爲每個RealSubject類創建一個代理類;該代理可以統一處理所有RealSubject類。
      • 但是如果代理要實例化,那麼他們必須知道具體的類。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章