代理模式就是實現一個類表明另外一個類的功能的一種結構性設計模式。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