代理模式属于结构型模式
概述:为其他对象提供一种代理以控制对这个对象的访问
代理模式:
为其他对象提供一种代理以控制对这个对象的访问
代理模式使用场合:
第一种:远程代理,就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实
第二种:虚拟代理,·根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象
第三种:安全代理,用来控制真实对象访问时的权限
第四种:智能指引,是指当调用真实的对象时,代理处理另外一些事
个人举例:
谈恋爱送花
<?php
namespace haibao\design\web\view\design;
use haibao\design\web\common\design\proxy\Proxyor;
class Proxy extends \haibao\design\web\view\Base{
protected function preRender(){
header("Content-type: text/html; charset=utf-8");
$proxy = new Proxyor('娇娇');
$proxy->giveDolls();
echo "<br/>";
$proxy->giveFlowers();
echo "<br/>";
$proxy->giveChocolate();
echo "<br/>";
}
}
<?php
/**
* 追求者的朋友 小席
* 真正的代理
*/
namespace haibao\design\web\common\design\proxy;
class Proxyor implements IGiveGift{
public $pursuit;
public function __construct($mm){
$this->pursuit = new Pursuit($mm);
}
public function giveDolls(){
$this->pursuit->giveDolls();
}
public function giveFlowers(){
$this->pursuit->giveFlowers();
}
public function giveChocolate(){
$this->pursuit->giveChocolate();
}
}
<?php
/**
* 代理模式
* 接口类
*/
namespace haibao\design\web\common\design\proxy;
interface IGiveGift{
public function giveDolls();
public function giveFlowers();
public function giveChocolate();
}
<?php
/**
* 追求者
* 实现送礼物接口
*/
namespace haibao\design\web\common\design\proxy;
class Pursuit implements IGiveGift{
public $mm;
public function __construct($mm){
$this->mm = $mm;
}
public function giveDolls(){
echo $this->mm .'送你娃娃';
}
public function giveFlowers(){
echo $this->mm .'送你花';
}
public function giveChocolate(){
echo $this->mm .'送你巧克力';
}
}