代理模式(Proxy Pattern):靜態代理 - 最易懂的設計模式解析
前言
今天我來全面總結一下Android開發中最常用的設計模式 - 代理模式。
目錄

944365-2a4efd2d7e4e0445.jpg
1. 介紹
1.1 定義
給目標物件提供一個代理物件,並由代理物件控制對目標物件的引用
代理物件:起到中介作用,連線客戶端和目標物件
例子:電腦桌面的快捷方式。電腦對某個程式提供一個快捷方式(代理物件),快捷方式連線客戶端和程式,客戶端通過操作快捷方式就可以操作那個程式
1.2 主要作用
通過引入代理物件的方式來間接訪問目標物件
1.3 解決的問題
防止直接訪問目標物件給系統帶來的不必要複雜性。
2. 模式原理
2.1 UML類圖 & 組成

944365-24c6bf44da1b79ad.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 Proxyimplements 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 缺點
- 由於在客戶端和真實主題之間增加了代理物件,因此會造成請求的處理速度變慢;
- 實現代理模式需要額外的工作(有些代理模式的實現非常複雜),從而增加了系統實現的複雜度。
-
應用場景
1.png