摘要:虛擬代理如果需要創建一個資源消耗較大的對象,先創建一個消耗相對較小的對象來表示,真實對象只在需要時才會被真正創建。虛擬代理通過使用一個小對象來代表一個大對象,可以減少系統資源的消耗,對系統進行優化并提高運行速度。
概念
代理模式(Proxy Pattern) :一種對象結構型模式。給某一個對象提供一個代理,并由代理對象控制對原對象的引用。
UML 角色抽象主題角色(Subject):定義了RealSubject和Proxy公用接口,這樣就在任何使用RealSubject的地方都可以使用Proxy。
真正主題角色(RealSubject):定義了Proxy所代表的真實實體。
代理對象(Proxy):保存一個引用使得代理可以訪問實體,并提供一個與RealSubject接口相同的接口,這樣代理可以用來代替實體(RealSubject)。
適用場景根據代理模式的使用目的,常見的代理模式有以下幾種類型:
遠程(Remote)代理:為一個位于不同的地址空間的對象提供一個本地 的代理對象,這個不同的地址空間可以是在同一臺主機中,也可是在 另一臺主機中,遠程代理又叫做大使(Ambassador)。
虛擬(Virtual)代理:如果需要創建一個資源消耗較大的對象,先創建一個消耗相對較小的對象來表示,真實對象只在需要時才會被真正創建。
Copy-on-Write代理:它是虛擬代理的一種,把復制(克?。┎僮餮舆t 到只有在客戶端真正需要時才執行。一般來說,對象的深克隆是一個 開銷較大的操作,Copy-on-Write代理可以讓這個操作延遲,只有對象被用到的時候才被克隆。
保護(Protect or Access)代理:控制對一個對象的訪問,可以給不同的用戶提供不同級別的使用權限。
緩沖(Cache)代理:為某一個目標操作的結果提供臨時的存儲空間,以便多個客戶端可以共享這些結果。
防火墻(Firewall)代理:保護目標不讓惡意用戶接近。
同步化(Synchronization)代理:使幾個用戶能夠同時使用一個對象而沒有沖突。
智能引用(Smart Reference)代理:當一個對象被引用時,提供一些額外的操作,如將此對象被調用的次數記錄下來等。
代碼代碼如下:
_name = $name; } /** * 說話 */ public function say() { echo $this->_name."在說話
"; } /** * 在跑步 */ public function run(){ echo $this->_name."在跑步
"; } } /** * Class Proxy 代理對象 */ class Proxy implements Subject { // 真實主題對象 private $_realSubject = null; /** * Proxy constructor. 構造方法,依賴注入方式儲存真實對象 * * @param RealSubject|null $realSubject */ public function __construct(RealSubject $realSubject = null) { if (empty($realSubject)) { $this->_realSubject = new RealSubject(); } else { $this->_realSubject = $realSubject; } } /** * 調用說話方法 */ public function say() { $this->_realSubject->say(); } /** * 調用跑步方法 */ public function run() { $this->_realSubject->run(); } } /** * Class Client 本地測試 */ class Client { public static function test() { // 創建 $subject = new RealSubject("張三"); // 代理 $proxy = new Proxy($subject); // 張三在說話 $proxy->say(); // 張三在跑步 $proxy->run(); } } // 測試 Client::test();
運行結果:
張三在說話 張三在跑步優點和缺點 優點:
代理模式能夠協調調用者和被調用者,在一定程度上降低了系統的耦合度。
遠程代理使得客戶端可以訪問在遠程機器上的對象,遠程機器 可能具有更好的計算性能與處理速度,可以快速響應并處理客戶端請求。
虛擬代理通過使用一個小對象來代表一個大對象,可以減少系統資源的消耗,對系統進行優化并提高運行速度。
保護代理可以控制對真實對象的使用權限。
缺點:由于在客戶端和真實主題之間增加了代理對象,因此 有些類型的代理模式可能會造成請求的處理速度變慢。
實現代理模式需要額外的工作,有些代理模式的實現非常復雜。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22075.html
摘要:我們今天也來做一個萬能遙控器設計模式適配器模式將一個類的接口轉換成客戶希望的另外一個接口。今天要介紹的仍然是創建型設計模式的一種建造者模式。設計模式的理論知識固然重要,但 計算機程序的思維邏輯 (54) - 剖析 Collections - 設計模式 上節我們提到,類 Collections 中大概有兩類功能,第一類是對容器接口對象進行操作,第二類是返回一個容器接口對象,上節我們介紹了...
摘要:能夠協調調用者和被調用者,能夠在一定程度上降低系統的耦合性。特點低耦合性,獨立性好,安全性應用客戶訪問不到或者被訪問者希望隱藏自己,所以通過代理來訪問自己。 我們接著上面的幾種模式繼續講: 4、組合模式 將對象組合成樹形結構表示部分-整體的層次結構。 特點:靈活性強 應用:對象的部分-整體的層次結構,模糊組合對象和簡單對象處理問題 代碼實現 /** 組合模式* *///繼承模式clas...
閱讀 3239·2021-11-23 09:51
閱讀 2491·2021-09-27 13:34
閱讀 2472·2021-09-08 09:45
閱讀 672·2019-08-30 15:44
閱讀 3499·2019-08-29 12:17
閱讀 2766·2019-08-26 12:18
閱讀 2632·2019-08-26 10:10
閱讀 3083·2019-08-23 18:02