PHP設計模式 代理設計模式

原文: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)代理。

注意事項:

一、和適配器模式的區別:適配器模式主要改變所考慮對象的接口,而代理模式不能改變所代理類的接口。

二、和裝飾器模式的區別:裝飾器模式爲了加強功能,而代理模式是爲了加以控制。


代碼示例:

proxy_pattern_uml_diagram.jpg

<?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();

相關文章
相關標籤/搜索