設計模式-代理模式

1、概述

爲其它對象提供一種代理以控制對這個對象的訪問。

解決的問題:如果直接訪問對象比較困難,或直接訪問會給使用者或系統帶來一系列問題。這樣對於客戶端(調用者)來說,就不需要直接與真實對象進行交互,解除了調用者與真實對象的耦合。

2、模式中的角色

  • 抽象實體(Subject):定義了真實實體(RealSubject)和代理(Proxy)的公共接口,這樣就在任何時候使用真實實體(RealSubject)的地方使用代理(Proxy)。
  • 代理(Proxy):保存一個引用使得代理可以直接訪問真實實體,並提供一個與Subject的接口相同的接口,這樣代理就可以代替真實實體。
  • 真實實體(RealSubject):定義Proxy所代表的真實實體。

3、結構圖

在這裏插入圖片描述

4、代碼實現

// 抽象實體,定義真實實體與代理的公共接口
public  interface  ISubject{
   void Function1();
   void Function2();
}

// 真實實體,真正的功能實現者
public  class RealSubject implements ISubject{
    public void Function1()    {
        //業務方法具體實現代碼
    }
     public void Function2()    {
        //業務方法具體實現代碼
    }
}

 //代理,用來訪問真實的實體
 public class Proxy implements ISubject{
    
     // 保存一個真實實體,用以在代理中訪問真實實體的功能。
     private RealSubject realSubject;

      public Proxy(){
          realSubject = new RealSubject();
      }
  
      // 實現與Subject相同的接口,實際調用的是RealSubject的Function1()
      public void Function1() {
          realSubject.Function1();
      }
      public void Function2(){
          realSubject.Function2();
      }
  }

具體調用:

 // 實例化代理
  ISubject subjectProxy = new Proxy();
  // 通過代理調用具體功能
   subjectProxy.Function1();
   subjectProxy.Function2();

5、使用場景

  • 遠程代理: 爲一個位於不同地址空間的的對象提供一個本地的代理。
  • 虛擬代理:如果需要創建一個消耗較大的對象,先創建一個消耗較小的對象來表示,真實對象只在需要時才被真實創建。
  • 安全代理:用來控制對真實對象的訪問權限
  • 智能指引:當調用真實對象時,代理提供一些額外的操作。如將對象被操作的次數記錄起來等。
  • 緩衝代理:爲某一個目標操作提供臨時的存儲空間,以便更多客戶端共享此結果。
  • 防火牆代理:保護目標不讓惡意用戶接近。
  • 同步化代理:使幾個用戶能同時使用一個對象而沒有衝突。

參考文章代理模式設計模式學習筆記-代理模式

發佈了138 篇原創文章 · 獲贊 146 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章