zoukankan      html  css  js  c++  java
  • 代理模式

    一、场景分析

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

  • 相关阅读:
    IE6-IE11兼容性问题列表及解决办法
    EJB--事务管理 .
    JDBC批处理---(java 对数据库的回滚) .
    redisb并发访问慢出现的问题
    redis其他问题
    多线程实现服务器端接收连接
    序列化作用
    redis的key过期时间
    nginx负载均衡和反向代理有什么区别
    nginx的负载均衡和反响代理配置
  • 原文地址:https://www.cnblogs.com/gspsuccess/p/9235666.html
Copyright © 2011-2022 走看看