外觀模式(Facade):為子系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
兩大角色:
外觀類Facade: 知道哪些子系統類別負責處理請求,將客戶的請求代理給適當的子系統物件。
子系統集合SubSystem: 實作子系統的功能,處理Facade物件指派的任務。注意:子類別沒有Facade的任何訊息,即沒有對Facade物件的引用。
本文以購買基金為例,客戶只需買進賣出基金(Facade),而其中的股票1、股票2、股票3等(SubSystem)操作由基金公司負責處理。
測試案例:
[code]int main(){ Fund fund;//基金对象(Facade) fund.fundBuy();//stock1 buy stock2 buy stock3 buy fund.fundSell(); //stock1 sell stcok2 sell stock3 sell return 0; }
外觀模式實作:
[code]//子系统不知道Facade的任何信息 //股票1号 class Stock1{ public: void sell(){ std::cout << "stock1 sell\n"; } void buy(){ std::cout << "stock1 buy\n"; } }; //股票2号 class Stock2{ public: void sell(){ std::cout << "stcok2 sell\n"; } void buy(){ std::cout << "stock2 buy\n"; } }; //股票3号 class Stock3{ public: void sell(){ std::cout << "stock3 sell\n"; } void buy(){ std::cout << "stock3 buy\n"; } }; //基金类是Facade class Fund{ public: Stock1 stock1; Stock2 stock2; Stock3 stock3; void fundSell(){ stock1.sell(); stock2.sell(); stock3.sell(); } void fundBuy(){ stock1.buy(); stock2.buy(); stock3.buy(); } };
何時使用外觀模式?
在設計初期,應該要有意識的將不同的兩層分開。
在開發階段,子系統往往因為不斷的重構演化而變得越來越複雜。
在維護一個遺留的大型系統時,可以將原始系統高度複雜的程式碼或設計粗糙的程式碼以比較簡單清晰的介面讓新系統與Facade物件互動。
以上就是C++設計模式淺識外觀模式的內容,更多相關內容請關注PHP中文網(www.php.cn)!