17.外观模式
1外觀模式的核心內容是:
A:多個子系統的類
B:通過一個統一的門面進行管理
2外觀模式的作用:讓各各子類的運行由一個類統一進行管理。
3外觀模式具體描述
門面模式:外部與一個子系統的通信必須通過一個統一的門面對象進行。
門面模式提供一個高層次的接口,使得子系統更易于使用。
每一個子系統只有一個門面類,而且此門面類只有一個實例,
也就是說它是一個單例模式。但整個系統可以有多個門面類。
?
我有一個專業的Nikon相機,我就喜歡自己手動調光圈、快門,
這樣照出來的照片才專業,但MM可不懂這些,教了半天也不會。
幸好相機有Facade設計模式,把相機調整到自動檔,
只要對準目標按快門就行了,一切由相機自動調整,
這樣MM也可以用這個相機給我拍張照片了。
4外觀模式類圖
5.代碼:
#include<iostream>
#include <string>
using namespace std;
//門面模式:外部與一個子系統的通信必須通過一個統一的門面對象進行。
//門面模式提供一個高層次的接口,使得子系統更易于使用。
//每一個子系統只有一個門面類,而且此門面類只有一個實例,
//也就是說它是一個單例模式。但整個系統可以有多個門面類。
?
//我有一個專業的Nikon相機,我就喜歡自己手動調光圈、快門,
//這樣照出來的照片才專業,但MM可不懂這些,教了半天也不會。
//幸好相機有Facade設計模式,把相機調整到自動檔,
//只要對準目標按快門就行了,一切由相機自動調整,
//這樣MM也可以用這個相機給我拍張照片了。
class Sub1
{
public:
??? void f1()
??? {
??????? cout << "子系統的方法 1" << endl;
??? }
};
?
class Sub2
{
public:
??? void f2()
??? {
??????? cout << "子系統的方法 2" << endl;
??? }
};
?
class Sub3
{
public:
??? void f3()
??? {
??????? cout << "子系統的方法 3" << endl;
??? }
};
?
class Facade
{
private:
??? Sub1 *s1;
??? Sub2 *s2;
??? Sub3 *s3;
public:
??? Facade()
??? {
??????? s1 = new Sub1();
??????? s2 = new Sub2();
??????? s3 = new Sub3();
??? }
??? void method()
??? {
??????? s1->f1();
??????? s2->f2();
??????? s3->f3();
??? }
};
?
int main()
{
??? Facade *f = new Facade();
??? f->method();
??? cin.get();
??? return 0;
}
運行結果如下:
總結