定义
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
简而言之外观模式就是为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
案例
现在你家有KTV模式和游戏模式的所有的设备,但你现在需要一个个设备去操作才能实现不同的模式。实现一个 一键切换模式 的系统。
KTV模式:电视打开,灯关掉,音箱打开,麦克风打开,dvd打开
游戏模式:电视打开,音箱打开,游戏机打开。
思路:
电视、灯、音箱等都能看做成一个子系统。而外观类去一键操作这些子系统
结构图:
#define CRT SECURE NO WARNINGS
#include<iostream>
#include<string>
using namespace std;
/***************************************************/
//电视机
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 KTVMode {
public:
Television* pTv;
Light* pLight;
Audio* pAudio;
Mircophone* pMicrophone;
DVDPlayer* pDvd;
public:
KTVMode(){
pTv = new Television;
pLight = new Light;
pAudio = new Audio;
pMicrophone = new Mircophone;
pDvd = new DVDPlayer;
}
~KTVMode() {
delete pTv;
delete pLight;
delete pAudio;
delete pMicrophone;
delete pDvd;
}
void OnKTV() {
pTv->On();
pLight->Off();
pAudio->On();
pMicrophone->On();
pDvd->On();
}
void UnKTV() {
pTv->Off();
pLight->On();
pAudio->Off();
pMicrophone->Off();
pDvd->Off();
}
};
void test01() {
KTVMode* ktv = new KTVMode;
ktv->OnKTV();
delete ktv;
}
int main()
{
test01();
return 0;
}

京公网安备 11010502036488号