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

相关文章
相关标签/搜索