結構型模式----外觀模式
外觀模式爲多個複雜的子系統提供一個一致的接口,而使這些子系統更加容易被訪問
模式結構與實現
模式的結構
- 外觀角色:爲多個子系統對外提供了一個共同的接口
- 子系統角色:實現系統的部分功能,客戶可以通過外觀角色訪問其資源
- 客戶角色:通過一個外觀角色訪問子系統的功能
外觀模式UML類圖
優點
- 降低了子系統和客戶端的耦合度
- 對用戶屏蔽了子系統組件
缺點
- 不能很好的限制客戶使用子系統類
- 增加新的子系統可能需要修改外觀類或客戶端的源代碼,違反了“開閉原則”
外觀模式的應用場景
- 擁有多個子系統的複雜系統構建時,外觀模式可以爲系統設計一個簡單的接口供外界訪問
- 當客戶端和多個子系統之間有很大聯繫時,引入外觀模式可以將他們分離,從而提高子系統的獨立性和可移植性
外觀模式實例
#include <iostream>
using namespace std;
class system1
{
public:
void run()
{
cout << "子系統一啓動" << endl;
}
};
class system2
{
public:
void run()
{
cout << "子系統二啓動" << endl;
}
};
class system3
{
public:
void run()
{
cout << "子系統三啓動" << endl;
}
};
class system4
{
public:
void run()
{
cout << "子系統四啓動" << endl;
}
};
class Faced
{
public:
Faced()
{
pSystem1 = new system1;
pSystem2 = new system2;
pSystem3 = new system3;
pSystem4 = new system4;
}
void work()
{
pSystem1->run();
pSystem2->run();
pSystem3->run();
pSystem4->run();
}
private:
system1* pSystem1;
system2* pSystem2;
system3* pSystem3;
system4* pSystem4;
};
int main()
{
Faced* face = new Faced;
face->work();
system("pause");
return 0;
}