PHP設計模式——代理模式
聲明:本系列部落格參考資料《大話設計模式》,作者程傑。
代理模式為其他對象提供一種代理以控制對這個對象的訪問。在某些情況下,一個對象不適合或者不能直接引用另一個對象,而代理對象可以在用戶端和目標對象之間起到中介的作用。
UML類圖:
角色介紹:
抽象主題角色(IGiveGift):定義了Follower和Proxy公用介面,這樣就在任何使用Follower的地方都可以使用Proxy。
主題角色(Follower):定義了Proxy所代表的真實實體。
代理對象(Proxy):儲存一個引用使得代理可以訪問實體,並提供一個與Follower介面相同的介面,這樣代理可以用來代替實體(Follower)。
代碼實現:
girlName=$name; } function giveRose() { echo "{$this->girlName}:這是我送你的玫瑰,望你能喜歡。"; } function giveChocolate() { echo "{$this->girlName}:這是我送你的巧克力,望你能收下。"; }}/**代理 * Class Proxy */class Proxy implements IGiveGift{ private $follower; function __construct($name='Girl') { $this->follower=new Follower($name); } function giveRose() { $this->follower->giveRose(); } function giveChocolate() { $this->follower->giveChocolate(); }}
用戶端代碼:
header("Content-Type:text/html;charset=utf-8");//------------------------代理模式測試代碼------------------require_once "./Proxy/Proxy.php";$proxy=new Proxy('範冰冰');$proxy->giveRose();$proxy->giveChocolate();
優點:
1、職責清晰
真實的角色就是實現實際的商務邏輯,不用關心其他非本職責的事務,通過後期的代理完成一件完成事務,附帶的結果就是編程簡潔清晰。
2、代理對象可以在用戶端和目標對象之間起到中介的作用,這樣起到了中介和保護了目標對象的作用。
3、高擴充性
適用情境:
1) 遠程代理(Remote Proxy)為一個位於不同的地址空間的對象提供一個本地的代理對象。
這個不同的地址空間可以是在同一台主機中,也可是在另一台主機中,遠程代理又叫做大使(Ambassador)
2) 虛擬代理(Virtual Proxy)根據需要建立開銷很大的對象。
如果需要建立一個資源消耗較大的對象,先建立一個消耗相對較小的對象來表示,真實對象只在需要時才會被真正建立。
3) 保護代理(Protection Proxy)控制對原始對象的訪問。
保護代理用於對象應該有不同的存取權限的時候。
4) 智能指引(Smart Reference)取代了簡單的指標,它在訪問對象時執行一些附加操作。
5) Copy-on-Write代理:它是虛擬代理的一種,把複製(複製)操作延遲到只有在用戶端真正需要時才執行。
一般來說,對象的深複製是一個開銷較大的操作,Copy-on-Write代理可以讓這個操作延遲,只有對象被用到的時候才被複製。
PHP物件導向設計模式
http://www.bkjia.com/PHPjc/1000541.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1000541.htmlTechArticlePHP設計模式——代理模式 聲明:本系列部落格參考資料《大話設計模式》,作者程傑。 代理模式為其他對象提供一種代理以控制對這個對象...