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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式(三) | 为别人做嫁衣---代理模式

發(fā)布時間:2025/5/22 asp.net 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式(三) | 为别人做嫁衣---代理模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

?


代理模式

?


?

?

代理模式:為其他對象提供一種代理,以控制對這個對象的訪問。

?

?

模式動機:

?

  • 在某些情況下,一個客戶不想或者不能直接引用一個對 象,此時可以通過一個稱之為“代理”的第三者來實現(xiàn) 間接引用。代理對象可以在客戶端和目標對象之間起到 中介的作用,并且可以通過代理對象去掉客戶不能看到 的內容和服務或者添加客戶需要的額外服務。

?

  • 代理應用的場合:

    • 遠程代理:也就是為一個對象在不同的地址空間提供局部代理,這樣可以隱藏一個對象存在于不同地址空間的事實。

    • 虛擬代理:是根據(jù)需要創(chuàng)建很大的對象,通過它來代理來存放實例化需要很長時間的真實對象,例如:網頁加載圖片。

    • 安全代理:用來控制真實對象訪問時的權限,一般用于對象應有不同的訪問權限的時候。

    • 智能指引:是指當調用真實對象時,代理處理另外一些事情。

?

代碼:(通過代理去追妹子的例子):

?

?publicinterfaceIGiveGift{

? ? ? ?voidGiveDolls();

? ? ? ?voidGiveFlowers();

? ? ? ?voidGiveChocolate();

? ?}

? ?//此類中的@Data用到了lombok的注解,可以自動提供get ?set方法,節(jié)省代碼量

? ?//請參考“eclipse使用lombok”博客。

? ?importlombok.Data;

? ?public@DataclassSchoolGirl{

? ? ? ?Stringname;

? ?}

? ?publicclassPursuitimplementsIGiveGift{

? ? ? ?SchoolGirlmm;

? ? ? ?publicPursuit(SchoolGirlmm){

? ? ? ? ? ?super();

? ? ? ? ? ?this.mm=mm;

? ? ? ?}

? ? ? ?publicPursuit(){

? ? ? ? ? ?super();

? ? ? ?}

? ? ? ?@Override

? ? ? ?publicvoidGiveDolls(){

? ? ? ? ? ?// TODO Auto-generated method stub

? ? ? ? ? ?System.out.println(mm.getName()+"送你洋娃娃。");

? ? ? ?}

? ? ? ?@Override

? ? ? ?publicvoidGiveFlowers(){

? ? ? ? ? ?// TODO Auto-generated method stub

? ? ? ? ? ?System.out.println(mm.getName()+"送你鮮花。");

? ? ? ?}

? ? ? ?@Override

? ? ? ?publicvoidGiveChocolate(){

? ? ? ? ? ?// TODO Auto-generated method stub

? ? ? ? ? ?System.out.println(mm.getName()+"送你巧克力。");

? ? ? ?}

? ?}

? ?publicclassProxyimplementsIGiveGift{

? ? ? ?Pursuitgg;

? ? ? ?publicProxy(){

? ? ? ? ? ?super();

? ? ? ?}

? ? ? ?publicProxy(SchoolGirlmm){

? ? ? ? ? ?super();

? ? ? ? ? ?this.gg=newPursuit(mm);

? ? ? ?}

? ? ? ?@Override

? ? ? ?publicvoidGiveDolls(){

? ? ? ? ? ?// TODO Auto-generated method stub

? ? ? ? ? ?gg.GiveDolls();

? ? ? ?}

? ? ? ?@Override

? ? ? ?publicvoidGiveFlowers(){

? ? ? ? ? ?// TODO Auto-generated method stub

? ? ? ? ? ?gg.GiveFlowers();

? ? ? ?}

? ? ? ?@Override

? ? ? ?publicvoidGiveChocolate(){

? ? ? ? ? ?// TODO Auto-generated method stub

? ? ? ? ? ?gg.GiveChocolate();

? ? ? ?}

? ?}

? ?publicclassTest{

? ? ? ?publicstaticvoidmain(String[]args){

? ? ? ? ? ?SchoolGirlmm=newSchoolGirl();

? ? ? ? ? ?mm.setName("小美");

? ? ? ? ? ?Proxydaili=newProxy(mm);

? ? ? ? ? ?daili.GiveDolls();

? ? ? ? ? ?daili.GiveFlowers();

? ? ? ? ? ?daili.GiveChocolate();

? ? ? ?}

? ?}

?

代理模式結構圖:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

?

?

  • Subject接口,定義了RealSubject和Proxy的共用接口,這樣就在任何使用RealSubject的地方都可以使用Proxy。

?

publicinterfaceSubject

{

? ?publicvoidrequest();

}

  • RealSubject定義Proxy所代表的真實實體,實現(xiàn)了Subject接口。

publicRealSubjectimplementSubject

{

? ?publicvoidrequest()

{

? ? ? ?//真實請求

? ?}

}?

?

  • Proxy類,保存一個實體的引用使得代理可以訪問實體,并實現(xiàn)Subject的接口,這樣就可以用來代替實體。

publicclassProxyimplementSubject

{

? ?RealSubjectrealSubject;

? ?publicProxy(){

? ? ? ?realSubject=newRealSubject();

? ?}

? ?publicvoidrequest(){

? ? ? ?realSubject.request();? ? ?

? ?}

}

  • 客戶端代碼:

publicstaticvoidmain(String[]args)

{

? ?Proxyproxy=newProxy();

? ?proxy.request();

}

?

?

?


?

?優(yōu)點


?

?

代理模式的優(yōu)點

  • 代理模式能夠協(xié)調調用者和被調用者,在一定程度上降低了系 統(tǒng)的耦合度。

  • 遠程代理使得客戶端可以訪問在遠程機器上的對象,遠程機器 可能具有更好的計算性能與處理速度,可以快速響應并處理客戶端請求。

  • 虛擬代理通過使用一個小對象來代表一個大對象,可以減少系 統(tǒng)資源的消耗,對系統(tǒng)進行優(yōu)化并提高運行速度。

  • 保護代理可以控制對真實對象的使用權限。

?


?

缺點


?

?

代理模式的缺點

  • 由于在客戶端和真實主題之間增加了代理對象,因此 有些類型的代理模式可能會造成請求的處理速度變慢。

  • 實現(xiàn)代理模式需要額外的工作,有些代理模式的實現(xiàn) 非常復雜。

?


?

適用環(huán)境


?

?

根據(jù)代理模式的使用目的,常見的代理模式有以下幾種類型:

  • 遠程(Remote)代理:為一個位于不同的地址空間的對象提供一個本地 的代理對象,這個不同的地址空間可以是在同一臺主機中,也可是在 另一臺主機中,遠程代理又叫做大使(Ambassador)。

  • 虛擬(Virtual)代理:如果需要創(chuàng)建一個資源消耗較大的對象,先創(chuàng)建一個消耗相對較小的對象來表示,真實對象只在需要時才會被真正創(chuàng)建。

  • Copy-on-Write代理:它是虛擬代理的一種,把復制(克隆)操作延遲 到只有在客戶端真正需要時才執(zhí)行。一般來說,對象的深克隆是一個 開銷較大的操作,Copy-on-Write代理可以讓這個操作延遲,只有對象被用到的時候才被克隆。

  • 保護(Protect or Access)代理:控制對一個對象的訪問,可以給不同的用戶提供不同級別的使用權限。

  • 緩沖(Cache)代理:為某一個目標操作的結果提供臨時的存儲空間,以便多個客戶端可以共享這些結果。

  • 防火墻(Firewall)代理:保護目標不讓惡意用戶接近。

  • 同步化(Synchronization)代理:使幾個用戶能夠同時使用一個對象而沒有沖突。

  • 智能引用(Smart Reference)代理:當一個對象被引用時,提供一些額外的操作,如將此對象被調用的次數(shù)記錄下來等。

轉載于:https://www.cnblogs.com/to-string-hct/p/9363047.html

總結

以上是生活随笔為你收集整理的设计模式(三) | 为别人做嫁衣---代理模式的全部內容,希望文章能夠幫你解決所遇到的問題。

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