PHP設計模式 代理設計模式

原文:http://www.runoob.com/design-pattern/proxy-pattern.html


概述:

一個類代表另一個類的功能,這種屬於結構性設計模式;主要是爲其他對象提供一種代理以控制這個對象的訪問。


優點:

1、職責清晰。

2、高擴展性。

3、智能化。

缺點:

1、由於在客戶端和真實主題之間增加了代理對象,因此有些類型的代理模式可能會造成請求的處理速度變慢。

2、實現代理模式需要額外的工作,有些代理模式的實現非常複雜。

使用場景:

按職責來劃分,通常有以下使用場景:

1、遠程代理。

2、虛擬代理。

3、Copy-on-Write 代理。

4、保護(Protect or Access)代理。

5、Cache代理。

6、防火牆(Firewall)代理。

7、同步化(Synchronization)代理。

8、智能引用(Smart Reference)代理。

注意事項:

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

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


代碼示例:

proxy_pattern_uml_diagram.jpg

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章