日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

漫说代理模式---给宝宝成长护航

發布時間:2025/4/5 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 漫说代理模式---给宝宝成长护航 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 寶寶還很小,外面的世界可不安全,現在寶寶的護航者寶寶的監護人爸爸媽媽閃亮登場。

?

2,監護過程:有了監護人,寶寶就比較安全了,如果誰想和寶寶一起玩就需要先找到監護人,經過監護人同意才可以和寶寶一起玩。

還比如過年了,寶寶收到很多壓歲錢,需要把錢存到銀行,就需要父母幫忙才可以。

3. 上面就用到了代理模式。

As described by GoF:

"Provide a surrogate or placeholder for another object to control access over it."

UML圖如下所示:

1)代理角色(Proxy):
. 保存一個引用使得代理可以訪問實體。若 RealSubject和Subject的接口相同,Proxy會引用Subject。
. 提供一個與Subject的接口相同的接口,這樣代理就可以用來替代實體。
. 控制對實體的存取,并可能負責創建和刪除它。
. 其他功能依賴于代理的類型:
? Remote Proxy負責對請求及其參數進行編碼,并向不同地址空間中的實體發送已編碼的請求。
? Virtual Proxy可以緩存實體的附加信息,以便延遲對它的訪問。
? Protection Proxy檢查調用者是否具有實現一個請求所必需的訪問權限。
2) 抽象主題角色(Subject):定義真實主題角色RealSubject 和 抽象主題角色Proxy的共用接口,這樣就在任何使用RealSubject的地方都可以使
用Proxy。代理主題通過持有真實主題RealSubject的引用,不但可以控制真實主題RealSubject的創建或刪除,可以在真實主題RealSubject被調用前進行攔截,或在調用后進行某些操作.?

3) 真實主題角色(RealSubject):定義了代理角色(proxy)所代表的具體對象.?

?

4. 代理模式的應用場景

  • 1) Remote Proxy可以隱藏一個對象存在于不同地址空間的事實。也使得客戶端可以訪問在遠程機器上的對象,遠程機器可能具有更好的計算性能與處理速度,可以快速響應并處理客戶端請求。
    2) Virtual Proxy?可以進行最優化,例如根據要求創建對象。即通過使用一個小對象來代表一個大對象,可以減少系統資源的消耗。
    3) Protection Proxies和Smart Reference都允許在訪問一個對象時有一些附加的內務處理(Housekeeping task) 。

    Proxy模式還可以對用戶隱藏另一種稱之為寫時復制(copy-on-write)的優化方式,該優化與根據需要創建對象有關。拷貝一個龐大而復雜的對象是一種開銷很大的操作,如果這個拷貝根本沒有被修改,那么這些開銷就沒有必要。用代理延遲這一拷貝過程,我們可以保證只有當這個對象被修改的時候才對它進行拷貝。在實現copy-on-write時必須對實體進行引用計數。拷貝代理僅會增加引用計數。只有當用戶請求一個修改該實體的操作時,代理才會真正的拷貝它。在這種情況下,代理還必須減
    少實體的引用計數。當引用的數目為零時,這個實體將被刪除。copy-on-write可以大幅度的降低拷貝龐大實體時的開銷。

    代理模式能夠協調調用者和被調用者,在一定程度上降低了系統的耦合度。
  • 代理模式的缺點
    由于在客戶端和真實主題之間增加了代理對象,因此有些類型的代理模式可能會造成請求的處理速度變慢。
    實現代理模式需要額外的工作,有些代理模式的實現非常復雜。

5. 示例程序:

? ??JDK proxies

import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; interface AnInterface {public void doSomething(); } class AClass implements AnInterface {public void doSomething() {System.out.println("Inside Method AClass.doSomething()");} } public class Test {public static void main(String args[]) {AnInterface realSubject = new AClass();AnInterface proxy = (AnInterface)Proxy.newProxyInstance(realSubject.getClass().getClassLoader(),realSubject.getClass().getInterfaces(),new SimpleInvocationHandler(realSubject));passMeAProxy(proxy);}private static void passMeAProxy(AnInterface anInterface) {anInterface.doSomething();} } class SimpleInvocationHandler implements InvocationHandler {public SimpleInvocationHandler(Object realSubject) {this.realSubject = realSubject;}public Object invoke(Object proxy, Method m, Object[] args){Object result = null;System.out.println("Before Calling " + m.getName());try {result = m.invoke(realSubject, args); }catch(Exception ex) {System.exit(1);}System.out.println("After Calling " + m.getName());return result;}private Object realSubject = null; }

?

?reference from :

? ?http://www.oodesign.com/proxy-pattern.html

? ?http://www.javaworld.com/article/2074068/learn-java/take-control-with-the-proxy-design-pattern.html?page=2

? ?http://blog.csdn.net/hguisu/article/details/7542143

?

轉載于:https://www.cnblogs.com/davidwang456/p/3665905.html

總結

以上是生活随笔為你收集整理的漫说代理模式---给宝宝成长护航的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。