原文: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();