外觀模式驯鳖,為子系統(tǒng)中的一組接口提供一個一致的界面迈着,此模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用怖辆。
外觀模式結構圖
image
外觀模式基本代碼
#include <iostream>
using namespace std;
class SubSystemOne {
public:
void MethodOne() { cout << "SubSystemOne" << endl; }
};
class SubSystemTwo {
public:
void MethodTwo() { cout << "SubSystemTwo" << endl; }
};
class SubSystemThree {
public:
void MethodThree() { cout << "SubSystemThree" << endl; }
};
class SubSystemFour {
public:
void MethodFour() { cout << "SubSystemFour" << endl; }
};
class Facade {
private:
SubSystemOne s1;
SubSystemTwo s2;
SubSystemThree s3;
SubSystemFour s4;
public:
void MethodA() { // 方法組合
s1.MethodOne();
s3.MethodThree();
}
void MethodB() { // 方法組合
s2.MethodTwo();
s3.MethodThree();
s4.MethodFour();
}
};
int main() {
Facade f;
f.MethodA(); // SubSystemOne
// SubSystemThree
cout << endl;
f.MethodB(); // SubSystemTwo
// SubSystemThree
// SubSystemFour
return 0;
}
使用場景
分三個階段:
- 在設計初期階段是复,應該要有意識的將不同的兩個層分離,在層與層之間建立外觀Facade疗隶,這樣可以為復雜的子系統(tǒng)提供一個簡單的接口佑笋,使得耦合大大降低;
- 在開發(fā)階段斑鼻,子系統(tǒng)往往因為不斷的重構演化而變得越來越復雜蒋纬,增加外觀Facade可以提供一個簡單的接口,減少它們之間的依賴坚弱;
- 在維護一個遺留的大型系統(tǒng)是蜀备,可能這個系統(tǒng)已經(jīng)非常難以維護和擴展了,但新需求的開發(fā)需要依賴這個系統(tǒng)荒叶,則可以為新系統(tǒng)開發(fā)一個外觀Facade類碾阁,來提供設計粗糙或高復雜度的遺留代碼的比較 清晰的簡單接口,讓新系統(tǒng)與Facade對象交互些楣,F(xiàn)acade與遺留代碼交互所有復雜的工作: