小菜同事炒股虧慘。大鳥建議買基金:專業經理人統籌資金投資股票/債券/外匯。個人直投股票耦合度高(需關注 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 具體類,增刪品種極其麻煩。
定義:為子系統一組接口提供統一入口,定義高層接口使子系統更易用。

BuyFund()/SellFund() 統一操作。
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 內部,客戶端代碼零修改。耦合度大幅降低,正如基金屏蔽了底層資產複雜性。