首頁  >  文章  >  後端開發  >  聊聊PHP中的代理模式(正向代理和反向代理)

聊聊PHP中的代理模式(正向代理和反向代理)

青灯夜游
青灯夜游轉載
2021-07-13 19:16:374148瀏覽

在先前的文章《淺談PHP中的責任鏈模式》中我們介紹了PHP中的責任鏈模式,以下這篇文章帶大家了解一下PHP設計模式中的代理模式。

聊聊PHP中的代理模式(正向代理和反向代理)

代理人這個職業在中國有另外一個稱呼,房產經濟人、保險經濟人,其實這個職業在國外都是叫做房產代理或保險代理。顧名思義,就是由他們來幫我們處理這些對我們大部分人來說都比較生疏的專業領域的工作。代理模式也是一樣的道理,同時,在這篇文章中還會簡單的介紹正向代理和反向代理是怎麼回事。

Gof類別圖及解釋

GoF定義:為其它物件提供一種代理以控制對這個物件的存取

GoF類別圖

聊聊PHP中的代理模式(正向代理和反向代理)

#程式碼實作

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

實例

簡訊功能不能停,這回用簡單的代理模式來增加一些前後的提示吧!

簡訊發送類別圖

聊聊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 &#39;短信发送中...&#39;, PHP_EOL;
    }
}

class ProxySendMessage implements SendMessage
{
    private $realSendMessage;

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

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

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

說明

    ##範例非常簡單,還是普通代理的實現,這裡我們講下正向代理和反向代理
  • 通常我們所說的科學上網(fanqiang),就是正向代理,由我們使用軟體或者自己配置代理網關上網,實際就是我們把請求發送到指定的網關,再由這個網關代替我們去訪問其他網站,這種由我們指定選擇的代理就是正向代理
  • PHPer們大多還是比較清楚反向代理的,畢竟現在Nginx已經代替Apache成為PHP標配了。當我們造訪一個網站的時候,某些路徑或網域名稱並不一定是在這台伺服器上,他們在伺服器上直接代理到了其他的伺服器甚至是別人家的網站。對於這個我們這些瀏覽網站的人是不知道的,這種我們不知道就被莫名其妙代理了的情況就是反向代理,一般在服務後台運維中是必備知識!
原文網址:https://juejin.cn/post/6844903959988011016

作者:硬核心專案經理

推薦學習: 《

PHP影片教學

以上是聊聊PHP中的代理模式(正向代理和反向代理)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:juejin.cn。如有侵權,請聯絡admin@php.cn刪除