什么是外观模式
外观模式就是将一个复杂的子类系统抽象到同一个接口进行管理
外界只需要通过此接口与子类系统进行交互,不需要直接与复杂的子类系统进行交互
外观模式属于结构型模式
外观模式案例
1、实现KTV模式:打开电视,关灯,音响打开,麦克风打开,dvd打开
2、实现游戏模式:电视打开,音响打开,游戏机打开
// 电视机
class Television
{
public:
void on(){
cout << "打开电视" << endl;
}
void off(){
cout << "关闭电视" << endl;
}
};
// 灯
class Light
{
public:
void on(){
cout << "打开灯" << endl;
}
void off(){
cout << "关闭灯" << endl;
}
};
// 音响
class Audio
{
public:
void on(){
cout << "打开音响" << endl;
}
void off(){
cout << "关闭音响" << endl;
}
};
// 麦克风
class Mircophone
{
public:
void on(){
cout << "打开麦克风" << endl;
}
void off(){
cout << "关闭麦克风" << endl;
}
};
// DVD
class DVDplayer
{
public:
void on(){
cout << "打开DVD" << endl;
}
void off(){
cout << "关闭DVD" << endl;
}
};
// 游戏机
class Gamechine
{
public:
void on(){
cout << "打开游戏机" << endl;
}
void off(){
cout << "关闭游戏机" << endl;
}
};
// 外观一:KTV模式
class KTVMode
{
public:
KTVMode(){
pTv = new Television;
pLight = new Light;
pAudio = new Audio;
pMi = new Mircophone;
pDVD = new DVDplayer;
}
~KTVMode(){
delete pTv;
delete pLight;
delete pAudio;
delete pMi;
delete pDVD;
}
void OnKtv(){
pTv->on();
pLight->on();
pAudio->on();
pMi->on();
pDVD->on();
}
void OffKtv(){
pTv->off();
pLight->off();
pAudio->off();
pMi->off();
pDVD->off();
}
public:
Television * pTv;
Light * pLight;
Audio * pAudio;
Mircophone* pMi;
DVDplayer* pDVD;
};
// 外观二:游戏机模式
class GameMode
{
public:
GameMode(){
pTv = new Television;
pAudio = new Audio;
pGame = new Gamechine;
}
~GameMode(){
delete pTv;
delete pAudio;
delete pGame;
}
void OnGame(){
pTv->on();
pAudio->on();
pGame->on();
}
void OffGame(){
pTv->off();
pAudio->off();
pGame->off();
}
public:
Television * pTv;
Audio * pAudio;
Gamechine* pGame;
};
// 外观模式的使用
void test01(){
KTVMode* sp1 = new KTVMode();
sp1->OnKtv(); // 打开KTV模式
sp1->OffKtv(); // 关闭KTV模式
cout << "------------------------------" << endl;
GameMode* sp2 = new GameMode();
sp2->OnGame(); // 打开游戏模式
sp2->OffGame(); // 关闭游戏模式
delete sp1;
delete sp2;
}