代理模式
为其他对象提供一种代理以控制对这个对象的访问。
假设有个老人,他已经不能吃饭,不能睡觉,不能玩耍,这时候我们委托一个人,也就是找一个代理(delegate),将所有的事情交给这个代理去做。
模式中的角色
- 抽象角色(抽象类或接口):定义真实角色和代理角色所需要实现的方法
- 真实角色:实现抽象角色中的方法,解决业务逻辑,不需要关心其他职责事务
- 代理角色:实现抽象角色中的方法,代理真实角色实现业务逻辑,可以附加自己的操作
phpDemo
抽象角色
<?php
/*
定义一个接口
*/
interface life {
function eat();
function run();
function sleep();
}
?>
真实角色
<?php
/*
真实角色
*/
class user implements life {
public function run()
{
echo __CLASS__.' run<br/> ';
}
public function eat()
{
echo __CLASS__.' eat<br/> ';
}
public function sleep()
{
echo __CLASS__.' sleep<br/> ';
}
}
?>
代理角色
<?php
/*
代理角色
*/
class delegate implements life {
private $old_man;
//实现抽象角色的所有方法
public function __construct()
{
$this->old_man = new user();
}
public function run()
{
$this->old_man->run();
}
public function eat()
{
$this->old_man->eat();
}
public function sleep()
{
$this->old_man->sleep();
}
}
测试代码
$delegate = new delegate();
$delegate->run();
$delegate->eat();
$delegate->sleep();
//输出:user run user eat user sleep
总结
职责清晰,真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用。
- 高扩展性