原文:http://www.runoob.com/design-pattern/proxy-pattern.html
php
概述:html
一個類表明另外一個類的功能,這種屬於結構性設計模式;主要是爲其餘對象提供一種代理以控制這個對象的訪問。設計模式
優勢:
ide
一、職責清晰。
this
二、高擴展性。
設計
三、智能化。
缺點:
代理
一、因爲在客戶端和真實主題之間增長了代理對象,所以有些類型的代理模式可能會形成請求的處理速度變慢。htm
二、實現代理模式須要額外的工做,有些代理模式的實現很是複雜。
使用場景:對象
按職責來劃分,一般有如下使用場景:接口
一、遠程代理。
二、虛擬代理。
三、Copy-on-Write 代理。
四、保護(Protect or Access)代理。
五、Cache代理。
六、防火牆(Firewall)代理。
七、同步化(Synchronization)代理。
八、智能引用(Smart Reference)代理。
注意事項:
一、和適配器模式的區別:適配器模式主要改變所考慮對象的接口,而代理模式不能改變所代理類的接口。
二、和裝飾器模式的區別:裝飾器模式爲了加強功能,而代理模式是爲了加以控制。
代碼示例:
<?phpinterface Image{ public function display();}class RealImage implements Image { private $fileName; public function RealImage($fileName){ $this->fileName = fileName; $this->loadFromDisk($this->fileName); } public function display() { echo "Displaying " . $this->fileName; } private function loadFromDisk( $fileName){ echo "Loading " . $this->fileName; }}class ProxyImage implements Image{ private realImage = null; private $fileName; public function ProxyImage( $fileName){ $this->fileName = $fileName; } public function display() { if($this->realImage == null){ $this->realImage = new RealImage($this->fileName); } $this->realImage->display(); }}$p_w_picpath = new ProxyImage("test_10mb.jpg");$p_w_picpath->display();