PHP设计模式之代理模式

代理人这个职业在中国有另一个称呼,房产经济人、保险经济人,其实这个职业在国外都是叫作房产代理或者保险代理。顾名思义,就是由他们来帮咱们处理这些对咱们大部分人来讲都比较生疏的专业领域的工做。代理模式也是同样的道理,同时,在这篇文章中还会简单的介绍正向代理和反向代理是怎么回事。php

Gof类图及解释

GoF定义:为其它对象提供一种代理以控制对这个对象的访问git

GoF类图github

代理模式

代码实现服务器

interface Subject
{
    public function Request();
}

class RealSubject implements Subject
{
    function Request()
    {
        echo "真实的操做", PHP_EOL;
    }
}

class Proxy implements Subject
{
    private $realSubject;

    public function __construct()
    {
        $this->realSubject = new RealSubject();
    }

    public function Request()
    {
        echo "代理的操做", PHP_EOL;
        $this->realSubject->Request();
    }
}

$proxy = new Proxy();
$proxy->Request();
  • 代理模式的实现其实很是简单,或许你在不经意间常常会用到
  • 请注意代理模式与装饰器、适配器的区别,另外,模板方法模式也和它很像
  • 装饰器,通常是对对象进行装饰,其中的方法行为会有增长,以修饰对象为主
  • 适配器,通常会改变方法行为,目的是保持接口的统一但获得不一样的实现
  • 模板方法模式,咱们后面会讲,这里只要知道,模板方法是在抽象类中去组合调用子类的方法
  • 代理模式有几种形式:远程代理(例如:第三方接口SDK)、虚代理(例如:异步加载图片)、保护代理&智能指引(例如:权限保护),而咱们代码实现的最普通的代理,其实就是让代理类来代替真实类的操做

**微信

完整代码:https://github.com/zhangyue0503/designpatterns-php/blob/master/12.proxy/source/proxy.php运维

实例

短信功能不能停,这回用简单的代理模式来增长一些先后的提示吧!异步

短信发送类图学习

短信发送代理模式版

完整源码:https://github.com/zhangyue0503/designpatterns-php/blob/master/12.proxy/source/proxy-msg.php网站

<?php

interface SendMessage
{
    public function Send();
}

class RealSendMessage implements SendMessage
{
    public function Send()
    {
        echo '短信发送中...', PHP_EOL;
    }
}

class ProxySendMessage implements SendMessage
{
    private $realSendMessage;

    public function __construct($realSendMessage)
    {
        $this->realSendMessage = $realSendMessage;
    }

    public function Send()
    {
        echo '短信开始发送', PHP_EOL;
        $this->realSendMessage->Send();
        echo '短信结束发送', PHP_EOL;
    }
}

$sendMessage = new ProxySendMessage(new RealSendMessage());
$sendMessage->Send();

说明this

  • 例子很是简单,仍是普通代理的实现,这里咱们讲下正向代理和反向代理
  • 一般咱们所说的(fanqiang),就是正向代理,由咱们使用软件或者本身配置代理网关上网,实际就是咱们把请求发送到指定的网关,再由这个网关代替咱们去访问其余网站,这种由咱们指定选择的代理就是正向代理
  • PHPer们大多仍是比较清楚反向代理的,毕竟如今Nginx已经代替Apache成为了PHP标配了。当咱们访问一个网站的时候,某些路径或者域名并不必定是在这台服务器上,他们在服务器上直接代理到了其余的服务器甚至是别人家的站点。对于这个咱们这些浏览网站的人是不知道的,这种咱们不知道就被莫名其妙代理了的状况就是反向代理,通常在服务后台运维中是必备知识!

下期看点

代理模式说简单也简单,说复杂的话也很复杂,总之仍是根据业务形态来决定,模式真的只是为了解决问题而生的,问题能解决了,你也能够叫他经济人模式嘛,你说是否是!!下一篇咱们一块儿学习享元模式,听着又很高大上吧!!

关注公众号:【硬核项目经理】获取最新文章

添加微信/QQ好友:【xiaoyuezigonggong/149844827】免费得PHP、项目管理学习资料

知乎、公众号、抖音、头条搜索【硬核项目经理】

B站ID:482780532

相关文章
相关标签/搜索