大話設計模式(二)代理模式

      網友投稿 713 2025-04-11

      大話設計模式(二)代理模式

      前言

      代理模式(Proxy Pattern)是GoF 23種Java常用設計模式之一。代理模式的定義:Provide a surrogate or placeholder for another object to control?access to it(為其他對象提供一種代理以控制對這個對象的訪問)。使用代理模式創建代理對象,讓代理對象控制目標對象的訪問(目標對象可以是遠程的對象、創建開銷大的對象或需要安全控制的對象),并且可以在不改變目標對象的情況下添加一些額外的功能。

      UML類圖

      角色及其職責

      抽象角色:聲明真實對象和代理對象的共同接口;

      代理角色:代理對象角色內部含有對真實對象的引用,從而可以操作真實對象,同時代理對象提供與真實對象相同的接口以便在任何時刻都能代替真實對象。同時,代理對象可以在執行真實對象操作時,附加其他的操作,相當于對真實對象進行封裝。

      真實角色:代理角色所代表的真實對象,是我們最終要引用的對象。

      舉例

      下面以一個淺顯的例子進行介紹:Proxy喜歡班上的一個女生,但他又不好意思親自說,于是Proxy請Proxy_幫忙送花,送巧克力等。

      問題的解決:“Proxy”和“Proxy_”的方法有相似之處,只不過“Proxy_”送的禮物是“Proxy”買的。

      碼上說明

      package cn.edu.ujn.designpattern;

      //公共接口類

      interface GiveGift

      {

      public void givedolls();

      public void giveflowers();

      public void givechocolate();

      }

      //被追求者類

      class SchoolGirl

      {

      private String name;

      public SchoolGirl(String girlName) {

      this.name = girlName;

      }

      public String getName() {

      return name;

      }

      public void setName(String name) {

      this.name = name;

      }

      }

      // 追求者類

      class Pursuit implements GiveGift {

      SchoolGirl mm;

      public Pursuit(SchoolGirl mm) {

      this.mm = mm;

      }

      @Override

      public void givedolls() {

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

      }

      @Override

      public void giveflowers() {

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

      }

      @Override

      public void givechocolate() {

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

      }

      }

      // 代理類

      class Proxy_ implements GiveGift

      {

      Pursuit gg;

      public Proxy_(SchoolGirl mm){

      gg = new Pursuit(mm);

      }

      @Override

      public void givedolls() {

      gg.givedolls();

      }

      @Override

      public void giveflowers() {

      gg.giveflowers();

      }

      @Override

      public void givechocolate() {

      gg.givechocolate();

      }

      }

      public class Proxy{

      public static void main(String[] args) {

      SchoolGirl girl = new SchoolGirl("Proxy");

      Proxy_ demo = new Proxy_(girl);

      demo.givedolls();

      demo.giveflowers();

      demo.givechocolate();

      }

      }

      代理模式結構圖如下:

      應用場景

      現實世界中,秘書就相當于一個代理,老板開會,那么通知員工開會時間、布置會場、會后整理會場等等開會相關工作就可以交給秘書做,老板就只需要開會就行了,不需要親自做那些事。同理,在我們程序設計中也可使用代理模式來將由一系列無關邏輯組合在一起的代碼進行解耦合,比如業務代碼中的日志代碼就可以在代理中進行。spring的AOP就是典型的動態代理應用。

      應用形式

      (1)遠程代理(Remote Proxy)?-可以隱藏一個對象存在于不同地址空間的事實。也使得客戶端可以訪問在遠程機器上的對象,遠程機器可能具有更好的計算性能與處理速度,可以快速響應并處理客戶端請求。

      (2)虛擬代理(Virtual Proxy) – 允許內存開銷較大的對象在需要的時候創建。只有我們真正需要這個對象的時候才創建。

      (3)寫入時復制代理(Copy-On-Write Proxy)?– 用來控制對象的復制,方法是延遲對象的復制,直到客戶真的需要為止。是虛擬代理的一個變體。

      (4)保護代理(Protection (Access)Proxy)?– 為不同的客戶提供不同級別的目標對象訪問權限。

      大話設計模式(二)代理模式

      (5)緩存代理(Cache Proxy)?– 為開銷大的運算結果提供暫時存儲,它允許多個客戶共享結果,以減少計算或網絡延遲。

      (6)防火墻代理(Firewall Proxy) – 控制網絡資源的訪問,保護主題免于惡意客戶的侵害。

      (7)同步代理(SynchronizationProxy) – 在多線程的情況下為主題提供安全的訪問。

      (8)智能引用代理(Smart ReferenceProxy)?- 當一個對象被引用時,提供一些額外的操作,比如計算真實對象的引用次數,這樣當該對象沒有引用時,可以自動釋放它;或當第一次引用一個持久對象時,將它裝入內存;或在訪問一個實際對象前,檢查是否已經鎖定它,以確保其他對象不能改變它。

      (9)復雜隱藏代理(Complexity HidingProxy)?– 用來隱藏一個類的復雜集合的復雜度,并進行訪問控制。有時候也稱為外觀代理(Fa?ade Proxy),這不難理解。復雜隱藏代理和外觀模式是不一樣的,因為代理控制訪問,而外觀模式只提供另一組接口。

      優缺點

      優點:詳見代理的分類

      1)在一定程度上降低了系統的耦合度。

      2)代理模式在客戶端和目標對象之間起到一個中介作用,這樣可以起到保護目標對象的作用。代理對象也可以對目標對象調用之前進行其他操作。

      缺點:

      1)在客戶端和目標對象增加一個代理對象,會造成請求處理速度變慢。

      2)增加了系統的復雜度。

      美文美圖

      網絡

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:怎么擴大幻燈片(幻燈片怎么加大)
      下一篇:價值觀模板怎樣查找(如何尋找價值觀)
      相關文章
      亚洲av无码专区国产不乱码| 亚洲黄色激情视频| 中文无码亚洲精品字幕| 综合自拍亚洲综合图不卡区| 亚洲av无码av制服另类专区| 亚洲无线观看国产精品| 亚洲中文字幕无码不卡电影| 亚洲成a人片在线观看日本麻豆| 亚洲av中文无码字幕色不卡| 亚洲一线产品二线产品| 亚洲国产日韩综合久久精品| 亚洲日本久久久午夜精品| 色偷偷女男人的天堂亚洲网| 亚洲人成综合网站7777香蕉| 亚洲最大无码中文字幕| 亚洲色少妇熟女11p| 亚洲成av人在线观看网站| 亚洲AV永久无码精品一福利 | 国产亚洲成人在线播放va| 亚洲日韩中文在线精品第一 | 亚洲日韩国产成网在线观看| 中文国产成人精品久久亚洲精品AⅤ无码精品| 亚洲日本一区二区一本一道| 伊伊人成亚洲综合人网7777| 国产亚洲精品一品区99热| 亚洲妇熟XXXX妇色黄| 亚洲邪恶天堂影院在线观看| 亚洲美女aⅴ久久久91| 亚洲毛片一级带毛片基地| 亚洲Av无码一区二区二三区| 亚洲依依成人亚洲社区| 亚洲av乱码一区二区三区按摩| 天堂亚洲免费视频| 亚洲综合熟女久久久30p| 亚洲va久久久噜噜噜久久狠狠| 日产亚洲一区二区三区| 亚洲另类古典武侠| 亚洲欧美成aⅴ人在线观看| 国产偷国产偷亚洲高清在线| 久久久久亚洲AV成人网人人软件| 久久91亚洲人成电影网站|