代理模式(Proxy Pattern)
介绍
给某一个对象提供一个代理,并由代理对象控制对原对象的引用。
何时使用:需要访问的对象不能直接访问,在该对象的外面加一层代理层,来控制对该对象的访问。
优点:
- 代理层的加入,协调调用者和被调用者,降低系统的耦合性;
- 调用端只和代理层进行交互,隐藏被调用段信息,加强安全性。
缺点:
在原对象层面添加了代理层,可能造成访问速度变慢。
<?php
interface Subject{
function say();
function run();
}
class RealSubject implements Subject{
private $name;
function __construct($name){
$this->name = $name;
}
function say(){
echo $this->name." is eating.<br>";
}
function run(){
echo $this->name." is running.<br>";
}
}
class Proxy implements Subject{
private $realSubject = null;
function __construct(RealSubject $realSubject = null){
if(empty($realSubject)){
$this->realSubject = new RealSubject();
}else{
$this->realSubject = $realSubject;
}
}
function say(){
$this->realSubject->say();
}
function run(){
$this->realSubject->run();
}
}
//测试
$subject = new RealSubject("Lily");
$proxy = new Proxy($subject);
$proxy->say();
$proxy->run();