代理模式(Proxy)爲其餘對象提供一種代理以控制對這個對象的訪問。使用代理模式建立代理對象,讓代理對象控制目標對象的訪問(目標對象能夠是遠程的對象、建立開銷大的對象或須要安全控制的對象),而且能夠在不改變目標對象的狀況下添加一些額外的功能。php
在某些狀況下,一個客戶不想或者不能直接引用另外一個對象,而代理對象能夠在客戶端和目標對象之間起到中介的做用,而且能夠經過代理對象去掉客戶不能看到的內容和服務或者添加客戶須要的額外服務。安全
經典例子就是網絡代理,你想訪問 Facebook 或者 Twitter ,如何繞過 GFW?找個代理網絡
<? abstract class Subject { // 抽象主題角色 abstract public function action(); } class RealSubject extends Subject { // 真實主題角色 public function __construct() {} public function action() {} } class ProxySubject extends Subject { // 代理主題角色 private $_real_subject = NULL; public function __construct() {} public function action() { $this->_beforeAction(); if (is_null($this->_real_subject)) { $this->_real_subject = new RealSubject(); } $this->_real_subject->action(); $this->_afterAction(); } private function _beforeAction() { echo '在action前,我想幹點啥....'; } private function _afterAction() { echo '在action後,我還想幹點啥....'; } } // client $subject = new ProxySubject(); $subject->action();//輸出:在action前,我想幹點啥....在action後,我還想幹點啥....