代理模式
为其它对象提供一种代理以控制这个对象的访问。
场景实例:追求者(真实实体)追MM,但是害羞不敢追,叫朋友(代理)代为送礼物
首先定义个共有接口:
interface GiveGift {
function giveFlowers();
function giveFoods();
}
真实实体实现接口:
class Pursuit implements GiveGift {
protected $mm = null;
public function __construct(Girl $mm)
{
$this->mm = $mm;
}
public function giveFlowers()
{
echo $this->mm->name.',我送你花'.'<br>';
}
public function giveFoods()
{
echo $this->mm->name.',我送你吃的'.'<br>';
}
}
代理实现相同的接口用来可以代替实体,但保存一个引用让代理可以访问实体:
class Proxy implements GiveGift {
protected $gg = null;
public function __construct(Girl $mm)
{
$this->gg = new Pursuit($mm);
}
public function giveFlowers()
{
$this->gg->giveFlowers();
}
public function giveFoods()
{
$this->gg->giveFoods();
}
}
MM类:
class Girl {
public $name = '';
public function setName($name) {
$this->name = $name;
}
}
客户端代码:
$mm = new Girl();
$mm->setName('hellokity');
$proxy = new Proxy($mm);
$proxy->giveFoods();
$proxy->giveFlowers();
结果:
hellokity,我送你吃的
hellokity,我送你花