代理模式
為其他對象提供一種代理以控制對這個對象的訪問。在某些情況下,一個對象不適合或者不能直接引用另一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。
Demo
/**
* Interface Subject 抽象主題角色
*
* 定義RealSubject和Proxy共同具備的東西
*/
interface Subject
{
public function say();
public function run();
}
/**
* Class RealSubject 真正主題角色
*/
class RealSubject implements Subject
{
// 姓名
private $_name;
/**
* RealSubject constructor. 構(gòu)造方法
*
* @param $name
*/
public function __construct($name)
{
$this->_name = $name;
}
/**
* 說話
*/
public function say()
{
echo $this->_name."在說話<br>";
}
/**
* 在跑步
*/
public function run(){
echo $this->_name."在跑步<br>";
}
}
/**
* Class Proxy 代理對象
*/
class Proxy implements Subject
{
// 真實主題對象
private $_realSubject = null;
/**
* Proxy constructor. 構(gòu)造方法,依賴注入方式儲存真實對象
*
* @param RealSubject|null $realSubject
*/
public function __construct(RealSubject $realSubject = null)
{
if (empty($realSubject)) {
$this->_realSubject = new RealSubject();
} else {
$this->_realSubject = $realSubject;
}
}
/**
* 調(diào)用說話方法
*/
public function say()
{
$this->_realSubject->say();
}
/**
* 調(diào)用跑步方法
*/
public function run()
{
$this->_realSubject->run();
}
}
/**
* Class Client 本地測試
*/
class Client
{
public static function test()
{
// 創(chuàng)建
$subject = new RealSubject("張三");
// 代理
$proxy = new Proxy($subject);
// 張三在說話
$proxy->say();
// 張三在跑步
$proxy->run();
}
}
// 測試
Client::test();
請關(guān)注我的訂閱號

訂閱號.png