国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-09 16:50:10
字體:
來源:轉載
供稿:網友


前言

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

其他設計模式介紹 1分鐘全面了解“設計模式” 單例模式(Singleton) - 最易懂的設計模式解析 簡單工廠模式(SimpleFactoryPattern)- 最易懂的設計模式解析 工廠方法模式(Factory Method)- 最易懂的設計模式解析 抽象工廠模式(Abstract Factory)- 最易懂的設計模式解析 策略模式(Strategy Pattern)- 最易懂的設計模式解析 適配器模式(Adapter Pattern)- 最易懂的設計模式解析 代理模式(PRoxy Pattern)- 最易懂的設計模式解析 模板方法模式(Template Method) - 最易懂的設計模式解析 建造者模式(Builder Pattern)- 最易懂的設計模式解析 外觀模式(Facade Pattern) - 最易懂的設計模式解析


目錄

代理模式.jpg


1. 介紹

1.1 定義

給目標對象提供一個代理對象,并由代理對象控制對目標對象的引用

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

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. 應用場景

當需要為一個對象再不同的地址空間提供局部的代表時 此時的代理模式稱為遠程代理:為一個對象在不同的地址空間提供局部代表。

目的:

隱藏一個對象存在于不同地址空間的事實; 遠程機器可能具有更好的計算性能與處理速度,可以快速響應并處理客戶端請求。

當需要創建開銷非常大的對象時 此時的代理模式稱為虛擬代理:通過使用過一個小的對象代理一個大對象。

目的:減少系統的開銷。

當需要控制對原始對象的訪問時 此時的代理模式稱為保護代理:控制目標對象的訪問,給不同用戶提供不同的訪問權限

目的:用來控制對真實對象的訪問權限

當需要在訪問對象時附加額外操作時 此時的代理模式稱為智能引用代理,額外操作包括耗時操作、計算訪問次數等等 目的:在不影響對象類的情況下,在訪問對象時進行更多的操作 以上是最常用的使用場景,其他還包括:防火墻代理:保護目標不讓惡意用戶靠近Cache代理:為結果提供臨時的存儲空間,以便其他客戶端調用

5. 總結

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


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

相關文章閱讀 單例模式(Singleton) - 最易懂的設計模式解析 簡單工廠模式(SimpleFactoryPattern)- 最易懂的設計模式解析 工廠方法模式(Factory Method)- 最易懂的設計模式解析 抽象工廠模式(Abstract Factory)- 最易懂的設計模式解析 策略模式(Strategy Pattern)- 最易懂的設計模式解析 適配器模式(Adapter Pattern)- 最易懂的設計模式解析 代理模式(Proxy Pattern)- 最易懂的設計模式解析 模板方法模式(Template Method) - 最易懂的設計模式解析 建造者模式(Builder Pattern)- 最易懂的設計模式解析 外觀模式(Facade Pattern) - 最易懂的設計模式解析


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 广州市| 阳泉市| 泰顺县| 梅河口市| 体育| 无为县| 南投市| 子洲县| 琼结县| 吉安县| 织金县| 和硕县| 逊克县| 文登市| 巴南区| 稻城县| 秦安县| 宜良县| 天全县| 平乡县| 景洪市| 府谷县| 阿拉善左旗| 汶川县| 来安县| 大足县| 名山县| 佛坪县| 石景山区| 寿光市| 丹寨县| 乌鲁木齐县| 久治县| 通州市| 大同县| 永登县| 福清市| 贡嘎县| 若羌县| 若羌县| 北辰区|