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

設計模式精講:外觀模式——從股票投資到基金統一入口

     編輯:關於C語言

場景引入

小菜同事炒股虧慘。大鳥建議買基金:專業經理人統籌資金投資股票/債券/外匯。個人直投股票耦合度高(需關注 N 支股票),基金出現後,用戶只關心基金淨值漲跌,消除高耦合。

問題代碼:直接持有多支股票/債券/房產


Stock1* g1 = new Stock1(); Stock2* g2 = new Stock2(); Stock3* g3 = new Stock3();
NationalDebt1* nd = new NationalDebt1(); Realty1* rt = new Realty1();
g1->Buy(); g2->Buy(); g3->Buy(); nd->Buy(); rt->Buy(); // 買入
g1->Sell(); g2->Sell(); g3->Sell(); nd->Sell(); rt->Sell(); // 賣出
// 刪除 5 個對象...

客戶代碼直接依賴 5 具體類,增刪品種極其麻煩。

外觀模式:提供一致高層接口

定義:為子系統一組接口提供統一入口,定義高層接口使子系統更易用。

UML 結構

外觀模式 UML

  • Facade:基金類,持有子系統對象,提供 BuyFund()/SellFund() 統一操作。
  • Subsystem Classes:Stock1/2/3、NationalDebt1、Realty1 等具體投資標的。
  • Client:只與 Facade 交互。

核心代碼


class Fund { // Facade
    Stock1* g1; Stock2* g2; Stock3* g3;
    NationalDebt1* nd; Realty1* rt;
public:
    Fund() {
        g1=new Stock1(); g2=new Stock2(); g3=new Stock3();
        nd=new NationalDebt1(); rt=new Realty1();
    }
    ~Fund() { delete g1; delete g2; delete g3; delete nd; delete rt; }
    void BuyFund() {
        g1->Buy(); g2->Buy(); g3->Buy(); nd->Buy(); rt->Buy();
    }
    void SellFund() {
        g1->Sell(); g2->Sell(); g3->Sell(); nd->Sell(); rt->Sell();
    }
};

// 客戶端
int main() {
    Fund* fund = new Fund();
    fund->BuyFund();  // 一鍵買入
    fund->SellFund(); // 一鍵賣出
    delete fund;
    return 0;
}

效果

客戶端從依賴 5 類降為依賴 1 類。新增投資品種只需修改 Fund 內部,客戶端代碼零修改。耦合度大幅降低,正如基金屏蔽了底層資產複雜性。

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