代理模式

  • 介绍
  • 在客户端与实体之间建立一个代理对象(proxy),客户端对实体进行操作全部委派给代理对象,隐藏实体的具体实现细节。
  • 代理对象(proxy)还可以与业务代码分离,部署到另外的服务器。业务代码中通过RPC来委派任务
  • 简述

代理模式(Proxy Pattern) ,顾名思义,重点就是代理。也就是表示,给某一个对象提供一个代理,并由代理对象控制对原对象的引用。

  • 案例

    • 代码

      <?php
      /*
      * 代理模式
      */
      //代理抽象接口
      interface shop
      {
         public function buy($title);
      }
      //原来的CD商店,被代理对象
      class CDShop implements shop
      {
         public function buy($title)
         {
             echo "购买成功,这是你的《{$title}》唱片" . PHP_EOL;
         }
      }
      //CD代理
      class Proxy implements shop
      {
         public function buy($title)
         {
             $this->go();
             $CDshop = new CDshop;
             $CDshop->buy($title);
         }
         public function go()
         {
             echo "跑去香港代购" . PHP_EOL;
         }
      }
      // 客户端
      class client
      {
         public static function shoping($goods)
         {
             $proxy = new Proxy;
             $proxy->buy($goods);
         }
      }
      client::shoping("醒着做梦");
      
       //输出结果 '跑去香港代购 购买成功,这是你的《醒着做梦》唱片' 
    • 代码说明

首先代理模式都需要继承一个共用的接口,这里只有CDShop(CD商店)和Proxy (CD代理)这两个类来继承一个共用接口shop,并且其中都有一个共同的方法buy。
那么上述代码我们可以这样理解,当我们想要购买一张“醒着做梦”的唱片,但是由于本地没有资源,只能选择香港代理帮忙代购。这里我们就可以通过客户端来实例化代理Proxy,再调用代理中的购买方法buy。

然后代理可以通过go方法表示“跑去香港代购”,再new实例化CDshop,再通过其中buy方法来“购买唱片”

文章目录