Carson帶你學(xué)設(shè)計(jì)模式:靜態(tài)代理模式(Proxy Pattern)

前言

今天Carson來全面總結(jié)最常用的設(shè)計(jì)模式 - 代理模式。

其他設(shè)計(jì)模式介紹
這是一份全面 & 詳細(xì)的設(shè)計(jì)模式學(xué)習(xí)指南
Carson帶你學(xué)設(shè)計(jì)模式:單例模式(Singleton)
Carson帶你學(xué)設(shè)計(jì)模式:簡單工廠模式(SimpleFactoryPattern)
Carson帶你學(xué)設(shè)計(jì)模式:工廠方法模式(Factory Method)
Carson帶你學(xué)設(shè)計(jì)模式:抽象工廠模式(Abstract Factory)
Carson帶你學(xué)設(shè)計(jì)模式:策略模式(Strategy Pattern)
Carson帶你學(xué)設(shè)計(jì)模式:適配器模式(Adapter Pattern)
Carson帶你學(xué)設(shè)計(jì)模式:靜態(tài)代理模式(Proxy Pattern)
Carson帶你學(xué)設(shè)計(jì)模式:動(dòng)態(tài)代理模式(Proxy Pattern)
Carson帶你學(xué)設(shè)計(jì)模式:模板方法模式(Template Method)
Carson帶你學(xué)設(shè)計(jì)模式:建造者模式(Builder Pattern)
Carson帶你學(xué)設(shè)計(jì)模式:外觀模式(Facade Pattern)
Carson帶你學(xué)設(shè)計(jì)模式:觀察者模式(Observer)


目錄

代理模式.jpg

1. 介紹

1.1 定義

給目標(biāo)對象提供一個(gè)代理對象,并由代理對象控制對目標(biāo)對象的引用

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

1.2 主要作用

通過引入代理對象的方式來間接訪問目標(biāo)對象

1.3 解決的問題

防止直接訪問目標(biāo)對象給系統(tǒng)帶來的不必要復(fù)雜性。


2. 模式原理

2.1 UML類圖 & 組成

代理模式.png

2.2 實(shí)例講解

接下來我用一個(gè)實(shí)例來對代理模式進(jìn)行更深一步的介紹。
a. 實(shí)例概況

  • 背景:小成希望買一臺(tái)最新的頂配Mac電腦
  • 沖突:國內(nèi)還沒上,只有美國才有
  • 解決方案:尋找代購進(jìn)行購買

代購(代理對象) 代替 我(真實(shí)對象) 去買Mac(間接訪問的操作)

b. 使用步驟
步驟1: 創(chuàng)建抽象對象接口(Subject):聲明你(真實(shí)對象)需要讓代購(代理對象)幫忙做的事(買Mac)

public interface Subject {  
              public void buyMac();
}

步驟2: 創(chuàng)建真實(shí)對象類(RealSubject),即”我“

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

步驟3:創(chuàng)建代理對象類(Proxy),即”代購“,并通過代理類創(chuàng)建真實(shí)對象實(shí)例并訪問其方法

public class Proxy  implements Subject{
  
    @Override
    public void buyMac{
      
      //引用并創(chuàng)建真實(shí)對象實(shí)例,即”我“
      RealSubject realSubject = new RealSubject();

      //調(diào)用真實(shí)對象的方法,進(jìn)行代理購買Mac
      realSubject.buyMac();
      //代理對象額外做的操作
      this.WrapMac();
    }

     public void WrapMac(){
      System.out.println(”用盒子包裝好Mac“);  
    }
}

步驟4:客戶端調(diào)用


public class ProxyPattern {

    public static void main(String[] args){

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

結(jié)果輸出

買一臺(tái)Mac
用盒子包裝好Mac

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


3. 優(yōu)缺點(diǎn)

在全面解析完代理模式后,我來分析下其優(yōu)缺點(diǎn):

3.1 優(yōu)點(diǎn)

  • 協(xié)調(diào)調(diào)用者和被調(diào)用者,降低了系統(tǒng)的耦合度
  • 代理對象作為客戶端和目標(biāo)對象之間的中介,起到了保護(hù)目標(biāo)對象的作用

3.2 缺點(diǎn)

  • 由于在客戶端和真實(shí)主題之間增加了代理對象,因此會(huì)造成請求的處理速度變慢;
  • 實(shí)現(xiàn)代理模式需要額外的工作(有些代理模式的實(shí)現(xiàn)非常復(fù)雜),從而增加了系統(tǒng)實(shí)現(xiàn)的復(fù)雜度。

4. 應(yīng)用場景

示意圖

5. 總結(jié)

  • 本文主要對代理模式進(jìn)行了全面介紹
  • 接下來我會(huì)對每種設(shè)計(jì)模式進(jìn)行詳細(xì)的分析,歡迎關(guān)注Carson_Ho的簡書,不定期分享關(guān)于安卓開發(fā)的干貨,追求短、平、快,但卻不缺深度

請點(diǎn)贊!因?yàn)槟愕墓膭?lì)是我寫作的最大動(dòng)力!

相關(guān)文章閱讀
這是一份全面 & 詳細(xì)的設(shè)計(jì)模式學(xué)習(xí)指南
Carson帶你學(xué)設(shè)計(jì)模式:單例模式(Singleton)
Carson帶你學(xué)設(shè)計(jì)模式:簡單工廠模式(SimpleFactoryPattern)
Carson帶你學(xué)設(shè)計(jì)模式:工廠方法模式(Factory Method)
Carson帶你學(xué)設(shè)計(jì)模式:抽象工廠模式(Abstract Factory)
Carson帶你學(xué)設(shè)計(jì)模式:策略模式(Strategy Pattern)
Carson帶你學(xué)設(shè)計(jì)模式:適配器模式(Adapter Pattern)
Carson帶你學(xué)設(shè)計(jì)模式:靜態(tài)代理模式(Proxy Pattern)
Carson帶你學(xué)設(shè)計(jì)模式:動(dòng)態(tài)代理模式(Proxy Pattern)
Carson帶你學(xué)設(shè)計(jì)模式:模板方法模式(Template Method)
Carson帶你學(xué)設(shè)計(jì)模式:建造者模式(Builder Pattern)
Carson帶你學(xué)設(shè)計(jì)模式:外觀模式(Facade Pattern)
Carson帶你學(xué)設(shè)計(jì)模式:觀察者模式(Observer)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容