日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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

?

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

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

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

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

?

4. 代理模式的應(yīng)用場景

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

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

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

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

?

轉(zhuǎn)載于:https://www.cnblogs.com/davidwang456/p/3665905.html

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。