1. 程式人生 > >代理模式(Proxy Pattern)- 最易懂的設計模式解析

代理模式(Proxy Pattern)- 最易懂的設計模式解析

前言

今天我來全面總結一下Android開發中最常用的設計模式 - 代理模式。

目錄

代理模式.jpg

1. 介紹

1.1 定義

給目標物件提供一個代理物件,並由代理物件控制對目標物件的引用

  1. 代理物件:起到中介作用,連線客戶端和目標物件
  2. 例子:電腦桌面的快捷方式。電腦對某個程式提供一個快捷方式(代理物件),快捷方式連線客戶端和程式,客戶端通過操作快捷方式就可以操作那個程式

1.2 主要作用

通過引入代理物件的方式來間接訪問目標物件

1.3 解決的問題

防止直接訪問目標物件給系統帶來的不必要複雜性。

2. 模式原理

2.1 UML類圖 & 組成

代理模式.png

2.2 例項講解

接下來我用一個例項來對代理模式進行更深一步的介紹。
a. 例項概況

  • 背景:小成希望買一臺最新的頂配Mac電腦
  • 衝突:國內還沒上,只有美國才有
  • 解決方案:尋找代購進行購買

代購(代理物件) 代替 我(真實物件) 去買Mac(間接訪問的操作)

b. 使用步驟
步驟1: 建立抽象物件介面(Subject):宣告你(真實物件)需要讓代購(代理物件)幫忙做的事(買Mac)

public interface Subject {  
              public void buyMac();
}

步驟2:

建立真實物件類(RealSubject),即”我“

  public class RealSubject implement Subject{
    @Override
    public void buyMac() {  
        System.out.println(”買一臺Mac“);  
    }  
}

步驟3: 建立代理物件類(Proxy),即”代購“,並通過代理類建立真實物件例項並訪問其方法

public class Proxy  implements Subject{

    @Override
    public void buyMac{

      //引用並建立真實物件例項,即”我“
RealSubject realSubject = new RealSubject(); //呼叫真實物件的方法,進行代理購買Mac realSubject.buyMac(); //代理物件額外做的操作 this.WrapMac(); } public void WrapMac(){ System.out.println(”用盒子包裝好Mac“); } }

步驟4: 客戶端呼叫


public class ProxyPattern {

    public static void main(String[] args){

    Subject proxy = new Proxy();
    proxy.buyMac();
    }

}

結果輸出

買一臺Mac
用盒子包裝好Mac

通過上述這個常見的生活例子,我相信你已經完全明白了代理模式的原理了!!

3. 優缺點

在全面解析完代理模式後,我來分析下其優缺點:

3.1 優點

  • 協調呼叫者和被呼叫者,降低了系統的耦合度
  • 代理物件作為客戶端和目標物件之間的中介,起到了保護目標物件的作用

3.2 缺點

  • 由於在客戶端和真實主題之間增加了代理物件,因此會造成請求的處理速度變慢;
  • 實現代理模式需要額外的工作(有些代理模式的實現非常複雜),從而增加了系統實現的複雜度。

4. 應用場景

  • 當需要為一個物件再不同的地址空間提供區域性的代表時
    此時的代理模式稱為遠端代理:為一個物件在不同的地址空間提供區域性代表。

    目的:

    1. 隱藏一個物件存在於不同地址空間的事實;
    2. 遠端機器可能具有更好的計算效能與處理速度,可以快速響應並處理客戶端請求。
  • 當需要建立開銷非常大的物件時
    此時的代理模式稱為虛擬代理:通過使用過一個小的物件代理一個大物件。

    目的:減少系統的開銷。

  • 當需要控制對原始物件的訪問時
    此時的代理模式稱為保護代理:控制目標物件的訪問,給不同使用者提供不同的訪問許可權

    目的:用來控制對真實物件的訪問許可權

  • 當需要在訪問物件時附加額外操作時
    此時的代理模式稱為智慧引用代理,額外操作包括耗時操作、計算訪問次數等等
    目的:在不影響物件類的情況下,在訪問物件時進行更多的操作

以上是最常用的使用場景,其他還包括:
  • 防火牆代理:保護目標不讓惡意使用者靠近
  • Cache代理:為結果提供臨時的儲存空間,以便其他客戶端呼叫

5. 總結

本文主要對代理模式進行了全面介紹,接下來將介紹其他設計模式,有興趣可以繼續關注Carson_Ho的安卓開發筆記!!!!

請幫頂或評論點贊!因為你的鼓勵是我寫作的最大動力!

相關推薦

代理模式Proxy Pattern- 易懂設計模式解析

前言 今天我來全面總結一下Android開發中最常用的設計模式 - 代理模式。 目錄 1. 介紹 1.1 定義 給目標物件提供一個代理物件,並由代理物件控制對目標物件的引用 代理物件:起到中介作用,

代理模式Proxy Pattern:簡單&粗暴解析

1.前言 在之前的文章設計模式(Design pattern):簡單&粗暴解析中已經為大家深入淺出解析了 設計模式 的 七大原則、三大型別。 本文為大家解析三大型別中 結構型 裡其中的 代理模式。 文章中例項  linhaojian的Githu

建造者模式Builder Pattern- 易懂設計模式解析

前言 今天我來全面總結一下Android開發中最常用的設計模式 -建造者模式。 目錄 1. 介紹 1.1 定義 將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示 1.2 主要作用

【java項目實戰】代理模式Proxy Pattern,靜態代理 VS 動態代理

自己 text 好的 trace use 代理 分類 plproxy this 這篇博文,我們主要以類圖和代碼的形式來對照學習一下靜態代理和動態代理。重點解析各自的優缺點。 定義 代理模式(Proxy Pattern)是對象的結構型模式,代理模

設計模式之 - 代理模式Proxy Pattern

ride proxy idt object catch 實例化 圖片 null 人在 代理模式:代理是一種常用的設計模式,其目的就是為其他對象提供一個代理以控制對某個對象的訪問。代理類負責為委托類預處理消息,過濾消息並轉發消息,以及進行消息被委托類執行後的後續處理。很多可以

設計模式學習——代理模式Proxy Pattern

pre .cn mar str ubuntu 技術 運行 obj proxy 放假啦~學生們要買車票回家了,有汽車票、火車票,等。但是,車站很遠,又要考試,怎麽辦呢?找代理買啊,雖然要多花點錢,但是,說不定在搞活動,有折扣呢~ 1 /// 2 /// @fi

設計模式學習——代理模式Proxy Pattern之 強制代理強校驗,防繞過

arr cnblogs 其他 測試 auth using color ref use 上周溫習了代理模式:http://www.cnblogs.com/chinxi/p/7354779.html 在此進行拓展,學習強制代理。但是發現網上大多例子都有個“天坑”(我是這麽認為的

C#設計模式之十二代理模式Proxy Pattern【結構型】

ride col 安全 .html 使用權 防火墻 一對多 tro 橋接 原文:C#設計模式之十二代理模式(Proxy Pattern)【結構型】一、引言 今天我們要講【結構型】設計模式的第七個模式,也是“結構型”設計模式中的最後一個模式,該模式是【代理模式】,英文名稱

C#設計模式(13)——代理模式Proxy Pattern

web服務 軟件開發過程 smart stat args 橋接模式 復雜 src 空間 一、引言 在軟件開發過程中,有些對象有時候會由於網絡或其他的障礙,以至於不能夠或者不能直接訪問到這些對象,如果直接訪問對象給系統帶來不必要的復雜性,這時候可以在客戶端和目標對象之間增加一

重走Java設計模式——代理模式Proxy Pattern

代理模式 定義 為其他物件提供一種代理以控制對這個物件的訪問。 程式碼示例 我們將建立一個Image 介面和實現了 Image 介面的實體類。ProxyImage 是一個代理類,減少 RealImage 物件載入的記憶體佔用。 ProxyPatternDem

28.代理模式proxy pattern

1.結構 2.代理的種類(根據用途分類) 3.代理的優缺點 4.代理模式的實現 靜態代理(針對每個真實主題需要人為建立一個代理類) jdk動態代理(實質是生成一個實現我們傳入的介面,並且繼承Proxy的類,優點:針對某種功能的代理只需要實現一個InvocationHandler,然後

38C#設計模式——代理模式Proxy Pattern

引言 在軟體開發過程中,有些物件有時候會由於網路或其他障礙,以至於不能夠或者不能直接訪問到這些物件,如果直接訪問物件給系統帶來不必要的複雜性,這時候可以在客戶端和目標物件之間增加一層中間層,讓代理物件代替目標物件,然後客戶端只需要訪問代理物件,由代理物件去幫我們請求目標物件

設計模式代理模式Proxy Pattern

應用場景 Proxy代理模式是一種結構型設計模式,主要解決的問題是:直接訪問物件時帶來的問題。 為了保持行為的一致性,代理類和委託類通常會實現相同的介面,所以在訪問者看來兩者並無區別。 代理類種類: 靜態:建立代理類再對其編譯,在程式執行前代理類的.class檔案就已

代理模式 Proxy Pattern

切入故事: 我是遊戲至尊 定義: Provide a surrogate or placeholder for another object to control access to it.(為其他物件提供一種代理以控制對這個物件的訪問。 ) 通用類圖:       

代理模式Proxy Pattern:簡單&粗暴解析

1.前言 2.目錄 3.含義 一個類代表另一個類的功能。 4.解決 1.目標物件與訪問者高度耦合 & 難擴充套件的問題。 5.原理 **通過 【代理】這個中介,把 ”目標物件功能“ 與 ”訪問者“ 分離 **。 5.1 代理模式

代理模式Proxy Pattern

簡述 代理模式是一種結構型設計模式,代理模式主要包含三種角色:抽象物件角色、目標物件角色、代理物件角色,代理模式主要通過抽象物件角色來為目標物件提供一個代理物件,並由代理物件控制對原物件的引用,提供了一種對目標物件另外的訪問方式,這樣做的好處是,可以在目標物件

設計模式代理模式 Proxy Pattern

        代理模式:代理接活,被代理人幹活。主要是用了java的多型特性,定義一個藉口, 讓代理類和被代理類都實現該介面,關鍵在於在代理類的構造方法中引用被代理類 的構造方法。 介面: public interface Start {     public void sing();     public

設計模式 —— 代理模式Proxy Pattern

代理模式(Proxy Pattern) 概念: 定義:代理模式 為另一個物件提供一個替身或佔位符以控制這個物件的訪問。 代理模式很好理解,在生活中也很常見。舉個簡單的例子,我們自己能做很多事情(動作),比如寫作業,出去玩等。當我們和父母在家的時候,

設計模式-代理模式Proxy Pattern學習總結

1.3.Cglib代理上面的靜態代理和動態代理模式都是要求目標物件是實現一個介面的目標物件,但是有時候目標物件只是一個單獨的物件,並沒有實現任何的介面,這個時候就可以使用以目標物件子類的方式類實現代理,這種方法就叫做:Cglib代理Cglib代理,也叫作子類代理,它是在記憶體中構建一個子類物件從而實現對目標物

代理模式Proxy Pattern

定義: 為其他物件一種代理以控制對這個物件的訪問。 代理模式也叫作委託模式,它是一項基本設計技巧,許多其他模式,如狀態模式、策略模式、訪問者模式本質上是在更特殊的場合採用了委託模式,而且在日常的應用中,代理模式提供非常好的訪問控制。在一些著名的開元然間中也經常見到他的身影