## 模式定義:
外觀模式提供了一個統一的接口,用來訪問子系統中的一群接口。外觀定義了一個高層接口,讓子系統更容易使用。
## 模式結構:

## 舉例:
構造一個家庭影院,當啟動watchMovie方法時可以看電影,當使用endMovie時關閉電影。
## 編程實現及執行結果:
~~~
#include <iostream>
using namespace std;
//組件類
class Amplifier
{
public:
void on()
{
cout << "Amplifier on" << endl;
}
void off()
{
cout << "Amplifier off" << endl;
}
};
class Tuner
{
public:
void on()
{
cout << "Tuner on" << endl;
}
void off()
{
cout << "Tuner off" << endl;
}
};
class DvdPlayer
{
public:
void on()
{
cout << "DvdPlayer on" << endl;
}
void off()
{
cout << "DvdPlayer off" << endl;
}
};
class Screen
{
public:
void on()
{
cout << "Screen on" << endl;
}
void off()
{
cout << "Screen off" << endl;
}
};
//家庭影院
class HomeTheaterFacade
{
public:
//統一接口
void watchMovie()
{
amp.on();
tuner.on();
dvd.on();
screen.on();
}
void endMovie()
{
amp.off();
tuner.off();
dvd.off();
screen.off();
}
HomeTheaterFacade(Amplifier am,
Tuner tune,
DvdPlayer dv,
Screen scree)
{
amp = am;
tuner = tune;
dvd = dv;
screen = scree;
}
//~HomeTheaterFacade(){}
private:
Amplifier amp;
Tuner tuner;
DvdPlayer dvd;
Screen screen;
};
//客戶代碼
int main()
{
Amplifier amp;
Tuner tuner;
DvdPlayer dvd;
Screen screen;
HomeTheaterFacade homeTheaterFacade(amp,tuner,dvd,screen);;
homeTheaterFacade.watchMovie();
homeTheaterFacade.endMovie();
return 0;
}
~~~
執行結果:
**Amplifieron**
**Tuneron**
**DvdPlayeron**
**Screenon**
**Amplifieroff**
**Tuneroff**
**DvdPlayeroff**
**Screenoff**
**請按任意鍵繼續. . .**
## 設計原則:
最少知識原則:只和你的密友談話