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

C++ 設計模式:外觀模式完整解析與編譯器 Build 按鈕實例

     編輯:關於C語言

外觀模式為複雜子系統提供統一高層介面,降低客戶端使用複雜度。本文以 Visual Studio 「Build」按鈕一鍵觸發語法分析、中間碼生成、組譯、連結等子系統協作為例,詳解模式結構、優缺點、適用場景與 C++ 實作。

核心概念

  • Facade(外觀):知曉哪些子系統負責哪些功能,將客戶請求委派給適當子系統。
  • SubSystem(子系統):實作具體功能,處理 Facade 委派任務,不持有 Facade 參考(單向依賴)。
  • Client:僅與 Facade 互動,無需了解子系統內部結構與協作順序。

UML 類別圖

外觀模式 UML

C++ 實作:編譯器外觀

#include <iostream>
using namespace std;

// 子系統
class CSyntaxParser {
public:
    void SyntaxParser() { cout << "Syntax Parser" << endl; }
};
class CGenMidCode {
public:
    void GenMidCode() { cout << "Generate middle code" << endl; }
};
class CGenAssemblyCode {
public:
    void GenAssemblyCode() { cout << "Generate assembly code" << endl; }
};
class CLinkSystem {
public:
    void LinkSystem() { cout << "Link System" << endl; }
};

// 外觀
class Facade {
public:
    void Compile() {
        CSyntaxParser().SyntaxParser();
        CGenMidCode().GenMidCode();
        CGenAssemblyCode().GenAssemblyCode();
        CLinkSystem().LinkSystem();
    }
};

// 客戶端
int main() {
    Facade facade;
    facade.Compile();  // 一鍵完成所有編譯步驟
}

優點

  1. 屏蔽子系統細節,減少客戶端處理物件數量,使用更簡單。
  2. 實現子系統與客戶端鬆耦合:子系統內部可緊耦合演化,不影響客戶端。
  3. 有助建立分層架構,消除循環依賴,利於獨立開發/部署/測試。

適用場景

  1. 為複雜子系統提供簡單預設介面(大多數用戶足夠),進階用戶可繞過 Facade 直接用子系統。
  2. 客戶程式高度依賴子系統具體實作,引入 Facade 解耦,提高可移植性。
  3. 構建分層子系統,定義各層進入點,層間僅通過 Facade 通訊,簡化依賴圖。

三階段實務應用建議

  1. 設計初期:有意識分層(如三層架構),在資料存取/業務邏輯/表示層間建立 Facade。
  2. 開發階段:重構產生大量小類時,增加 Facade 提供簡單介面,減少相依。
  3. 維護階段:面對難維護的遺留系統,開發 Facade 封裝髒亂介面,新系統僅與 Facade 互動。

常見組合

  • Facade + Singleton:外觀類別通常只需一個實例,適用單例模式管理。
  • Facade + Abstract Factory:外觀負責協作流程,抽象工廠負責建立具體子系統實例。

總結

外觀模式是「簡單介面包裝複雜實作」的經典實踐。良好的 Facade 設計能大幅降低系統認知負擔,是架構分層、模組解耦、遺留系統包裝的利器。

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