面板模式(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"; }};//基金類是Facadeclass 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++設計模式淺識面板模式的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!