首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 設計模式:Proxy(代理模式)深度解析與實作

     編輯:PHP 綜合知識

什麼是代理模式?

代理模式是一種結構型設計模式,其核心概念在於「一個角色代表另一個角色採取行動」。就像現實生活中,紅酒廠商不會直接面對零售客戶,而是透過代理商完成銷售;客戶也不必親自尋找工廠,只需聯繫當地代理即可。在軟體設計中,代理模式為某個對象提供一個代理對象,並由代理對象控制對真實對象的引用。

代理模式的核心角色

  • 抽象主題角色:聲明代理主題和真實主題的公共介面,使任何使用真實主題的地方都能以代理主題替換。
  • 代理主題角色:持有真實主題的引用,提供與真實主題相同的介面,可在調用真實主題前進行攔截或預處理,調用後進行後續操作,甚至控制真實主題的建立與銷毀。
  • 真實主題角色:定義代理所代表的具體對象,實際執行業務邏輯。

PHP 程式碼實作範例

<?php
/**
 * 代理模式
 * 為其他對象提供一個代理以控制這個對象的訪問
 */
interface Proxy {
    public function request();
    public function display();
}

class RealSubject {
    public function request() {
        echo "RealSubject request<br/>";
    }

    public function display() {
        echo "RealSubject display<br/>";
    }
}

class ProxySubject implements Proxy {
    private $_subject = null;

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

    public function request() {
        // 可在這裡加入前置處理邏輯
        $this->_subject->request();
        // 可在這裡加入後置處理邏輯
    }

    public function display() {
        $this->_subject->display();
    }
}

// 客戶端使用
$objProxy = new ProxySubject();
$objProxy->request();
$objProxy->display();
?>

代理模式的運作方式與優勢

代理模式透過共同介面,使代理對象能無縫替換真實對象。代理在客戶端與真實對象之間充當中介,可在請求傳遞前進行必要的預處理(如權限檢查、快取讀取、日誌記錄等),降低系統耦合度。

經典應用場景:大圖片延遲載入

網頁瀏覽時,縮圖先行顯示,點擊後才載入大圖。代理對象負責先顯示縮圖,背景執行緒非同步載入大圖,載入完成後再切換顯示。這完美體現代理模式「控制存取」與「延遲載入」的優勢,不阻塞前台瀏覽體驗。

使用時機與注意事項

代理模式適用於需要控制物件存取、增加額外邏輯(如權限、快取、日誌)、或實現延遲初始化的場景。但若濫用會增加系統複雜度,務必確認符合使用條件再引入。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved