代理模式就是实现一个类表明另外一个类的功能的一种结构性设计模式。php
主要解决在直接访问对象时带来的问题,好比说:要访问的对象在远程的机器上。在面向对象系统中,有些对象因为某些缘由(好比对象建立开销很大,或者某些操做须要安全控制,或者须要进程外的访问),直接访问会给使用者或者系统结构带来不少麻烦,咱们能够在访问此对象时加上一个对此对象的访问层。设计模式
下面实现一个图片处理类,可是在使用的时候不直接调用这个实际的类,而是经过代理类的方式去使用。安全
<? interface Image{ public function display(); } class RealImage implements Image{ public $filename; public function __construct($file_name){ $this->filename = $file_name; $this->loadImage(); } public function display(){ echo "显示图片:{$this->filename}\n"; } public function loadImage(){ echo "加载图片:{$this->filename}\n"; } } class ProyImage implements Image{ public $realImage; public $filename; public function __construct($file_name){ $this->filename = $file_name; } public function display(){ if(!$this->realImage){ $this->realImage = new RealImage($this->filename); } $this->realImage->display(); } } $proy_image = new ProyImage("php.jpg"); $proy_image->display(); $proy_image->display(); //输出: //加载图片:php.jpg //显示图片:php.jpg //显示图片:php.jpg