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

相關文章
相關標籤/搜索