代理模式详解编程语言

一、场景分析

现在有如下场景:隔壁3班有个女孩叫娇娇,长的很漂亮。1班的卓贾易想追娇娇,但是又和娇娇不熟,所以让同班的与娇娇比较熟的戴立去帮忙送花送玩具,以此来赢得娇娇的芳心。

那么其实戴立做的事情就是帮卓贾易将礼物送到娇娇手里。

二、什么是代理模式

代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。

三、适用场景

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

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

    3. 安全代理,用来控制真实对象访问时的权限

    4. 智能指引,是指当调用真实的对象时,代理处理另外一些事

四、代码实现

//送礼物接口 
interface GiveGift 
{ 
    public function giveDolls(); 
    public function giveFlowers(); 
} 
//追求者类 
class Pursuit implements GiveGift 
{ 
    private $name; 
    private $beauty; 
    public function __construct($name,Beauty $beauty) 
    { 
        $this->name = $name; 
        $this->beauty = $beauty; 
    } 
    public function giveDolls() 
    { 
        echo $this->name.''.$this->beauty->getName().'送玩具'.PHP_EOL; 
    } 
    public function giveFlowers() 
    { 
        echo $this->name.''.$this->beauty->getName().'送鲜花'.PHP_EOL; 
    } 
} 
//美眉类 
class Beauty 
{ 
    private $name; 
    public function __construct($name) 
    { 
        $this->name = $name; 
    } 
    public function getName() 
    { 
        return $this->name; 
    } 
} 
//代理类 
class Proxy implements GiveGift 
{ 
    private $pursuit; 
    private $name; 
    public function __construct($name,Pursuit $pursuit) 
    { 
        $this->name = $name; 
        $this->pursuit = $pursuit; 
    } 
    private function introduct() 
    { 
        echo '我是'.$this->name.',我来替'; 
    } 
    public function giveDolls() 
    { 
        $this->introduct(); 
        $this->pursuit->giveDolls(); 
    } 
    public function giveFlowers() 
    { 
        $this->introduct(); 
        $this->pursuit->giveFlowers(); 
    } 
} 
$jiaojiao = new Beauty('娇娇'); 
$zhojiayi = new Pursuit('卓贾易',$jiaojiao); 
$daili = new Proxy('戴立',$zhojiayi); 
$daili->giveDolls(); 
$daili->giveFlowers();

五、优缺点

    优点:

         1、职责清晰。

         2、高扩展性。

         3、智能化。

    缺点:

         1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。

         2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

六、UML图

代理模式详解编程语言

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/16892.html

(0)
上一篇 2021年7月19日 19:40
下一篇 2021年7月19日 19:40

相关推荐

发表回复

登录后才能评论