代理模式

Posted gspsuccess

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代理模式相关的知识,希望对你有一定的参考价值。

一、场景分析

现在有如下场景:隔壁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图

技术分享图片

以上是关于代理模式的主要内容,如果未能解决你的问题,请参考以下文章

scrapy按顺序启动多个爬虫代码片段(python3)

用于从 cloudkit 检索单列的代码模式/片段

java代码实现设计模式之代理模式

代理模式(静态代理动态代理)代码实战(详细)

Java设计模式-代理模式之动态代理(附源代码分析)

代理模式(静态代理)