php设计模式——代理模式

代理模式

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

代理模式(Proxy Pattern) ,顾名思义,重点就是代理。也就是表示,给某一个对象提供一个代理,并由代理对象控制对原对象的引用。
代理模式的英文叫做Proxy或Surrogate,它是一种对象结构型模式。
这种模式是在客户端和真实主体(RealSubject)之间插入一个代理对象,维护subject接口和用不同的方式委派它的方法。
或者也可以这样理解,代理模式可以提供与代购网站类似的功能。所谓代购,大家肯定都比较清楚。常见的,比如让专门做代购的商家从国外帮你代购一些特定的商品(国内买不到或者价格非常昂贵)。像这种因为一些特殊原因,客户端不想或不能直接访问一个对象,这时可以通过一个称之为“代理”的第三者来实现间接访问,该方案对应的设计模式也就叫做代理模式

  • 案例
  • 代码
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方法来“购买唱片”

你可能感兴趣的:(php设计模式——代理模式)