PHP设计模式之代理模式

代理模式属于结构型模式

概述:为其他对象提供一种代理以控制对这个对象的访问

代理模式:

为其他对象提供一种代理以控制对这个对象的访问

代理模式使用场合:

第一种:远程代理,就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实

第二种:虚拟代理,·根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象

第三种:安全代理,用来控制真实对象访问时的权限

第四种:智能指引,是指当调用真实的对象时,代理处理另外一些事

个人举例:

谈恋爱送花

<?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 .'送你巧克力';

}

}

原文链接:,转发请注明来源!