代理人這個職業在中國有另外一個稱呼,房產經濟人、保險經濟人,其實這個職業在國外都是叫做房產代理或者保險代理,顧名思義,就是由他們來幫我們處理這些對我們大部分人來說都比較生疏的專業領域的作業,代理模式也是一樣的道理,同時,在這篇文章中還會簡單的介紹正向代理和反向代理是怎么回事,
Gof類圖及解釋
GoF定義:為其它物件提供一種代理以控制對這個物件的訪問
GoF類圖

代碼實作
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();
說明
- 例子非常簡單,還是普通代理的實作,這里我們講下正向代理和反向代理
- 通常我們所說的(fanqiang),就是正向代理,由我們使用軟體或者自己配置代理網關上網,實際就是我們把請求發送到指定的網關,再由這個網關代替我們去訪問其他網站,這種由我們指定選擇的代理就是正向代理
- PHPer們大多還是比較清楚反向代理的,畢竟現在Nginx已經代替Apache成為了PHP標配了,當我們訪問一個網站的時候,某些路徑或者域名并不一定是在這臺服務器上,他們在服務器上直接代理到了其他的服務器甚至是別人家的站點,對于這個我們這些瀏覽網站的人是不知道的,這種我們不知道就被莫名其妙代理了的情況就是反向代理,一般在服務后臺運維中是必備知識!
下期看點
代理模式說簡單也簡單,說復雜的話也很復雜,總之還是根據業務形態來決定,模式真的只是為了解決問題而生的,問題能解決了,你也可以叫他經濟人模式嘛,你說是不是!!下一篇我們一起學習享元模式,聽著又很高大上吧!!
關注公眾號:【硬核專案經理】獲取最新文章
添加微信/QQ好友:【xiaoyuezigonggong/149844827】免費得PHP、專案管理學習資料
知乎、公眾號、抖音、頭條搜索【硬核專案經理】
B站ID:482780532
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/239408.html
標籤:PHP
