外觀模式(Facade):為子系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,時刻這一子系統更加容易使用。
使用場景:首先,在設計初期階段,應該要有意識的將不同的兩個層分離。比如經典的三層結構,就需要考慮在數據訪問層和業務邏輯層、業務邏輯層和表示層的層與層之間建立外觀的Facade。其次,在開發階段,子系統往往因為不斷的重構演化而變得越來越復雜,大多數的模式使用時也都會產生很多很小的類,這本是好事,但也給外部調用它們的用戶程序帶來了使用上的困難,增加Facade可以提供一個簡單的接口,減少他們之間的依賴。第三,在維護一個遺留的大系統是,可能這個系統已經非常難以維護和擴展了,但因為它包含非常重要的功能,新的需求開發必需要依賴他。此時使用外觀模式是非常合適的。
#ifndef FACADE_H #define FACADE_H #includeusing namespace std; class Stock1 { public: void Buy(){ cout << "買入股票1\n"; } void Sell(){ cout << "賣出股票1\n"; } }; class Stock2 { public: void Buy(){ cout << "買入股票2\n"; } void Sell(){ cout << "賣出股票2\n"; } }; class Stock3 { public: void Buy(){ cout << "買入股票3\n"; } void Sell(){ cout << "賣出股票3\n"; } }; class NationalDebt1 { public: void Buy(){ cout << "買入國債1\n"; } void Sell(){ cout << "賣出國債1\n"; } }; class Reality1 { public: void Buy(){ cout << "買入房地產1\n"; } void Sell(){ cout << "賣出房地產1\n"; } }; class Fund { Stock1 st1; Stock2 st2; Stock3 st3; NationalDebt1 Nd; Reality1 Re; public: void Buy() { st1.Buy(); st2.Buy(); st3.Buy(); Nd.Buy(); Re.Buy(); } void Sell() { st1.Sell(); st2.Sell(); st3.Sell(); Nd.Sell(); Re.Sell(); } }; #endif
#include"Facade.h" int main() { Fund Fd; Fd.Buy(); Fd.Sell(); return 0; }