首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 設計模式:代理模式完整實現與開閉原則演示

     編輯:關於C++

代理模式核心思想

**代理類**實現與**真實主題**相同的接口,持有真實主題指針,客戶端通過代理間接訪問真實對象,從而在不修改真實類的情況下擴展功能(如權限控制、延遲加載、日誌記錄)。

代碼結構

// 抽象接口
class Subject {
public:
    virtual void request() = 0;
    virtual ~Subject() {}
};

// 真實主題
class RealSubject : public Subject {
public:
    void request() override { cout << "RealSubject::request\n"; }
};

// 代理類
class Proxy : public Subject {
    Subject *real; // 持有抽象接口,符合開閉原則
public:
    Proxy(Subject *r) : real(r) {}
    void request() override {
        cout << "Proxy: pre-processing\n";
        real->request();
        cout << "Proxy: post-processing\n";
    }
};

// 客戶端
int main() {
    RealSubject *real = new RealSubject();
    Proxy *proxy = new Proxy(real);
    proxy->request(); // 通過代理訪問
    delete proxy;
    delete real;
    return 0;
}

關鍵點解析

  1. 介面隔離:代理持有 `Subject*` 而非 `RealSubject*`,新增其他 `Subject` 實現無需修改 `Proxy`。
  2. 開閉原則:對擴展開放(新增 `RealSubject2`),對修改關閉(`Proxy` 不變)。
  3. 裝飾器區別:代理控制**訪問**,裝飾器增加**職責**;兩者結構相似但意圖不同。

常見變體

  • **虛擬代理**:延遲創建開銷大的對象(如圖片加載)。
  • **保護代理**:訪問控制(如權限檢查)。
  • **遠程代理**:RPC 調用本地存根。
  • **智能指針代理**:引用計數、自動釋放(`std::shared_ptr`)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved