C++外观模式
#include <iostream>
using namespace std;
//外观模式就是将复杂的子类系统抽象到同一个接口进行管理,
//外界只需要通过此接口与子类系统进行交互,
//而不必要和复杂的子类系统进行交互
class Television //电视机类
{
public:
void On(){
cout << "电视机打开" << endl;
}
void Off() {
cout << "电视机关闭" << endl;
}
};
class Gamemachine //游戏机类
{
public:
void On() {
cout << "游戏机打开" << endl;
}
void Off() {
cout << "游戏机关闭" << endl;
}
};
class Microphone //麦克风类
{
public:
void On() {
cout << "麦克风打开" << endl;
}
void Off() {
cout << "麦克风关闭" << endl;
}
};
class Sound //音响类
{
public:
void On() {
cout << "音响打开" << endl;
}
void Off() {
cout << "音响关闭" << endl;
}
};
class Light //灯类
{
public:
void On() {
cout << "灯打开" << endl;
}
void Off() {
cout << "灯关闭" << endl;
}
};
class DVD //DVD类
{
public:
void On() {
cout << "DVD打开" << endl;
}
void Off() {
cout << "DVD关闭" << endl;
}
};
class Facade
{
public:
Facade() {
ds = new Television;
yxj = new Gamemachine;
mkf = new Microphone;
yx = new Sound;
d = new Light;
dvd = new DVD;
}
void KTVPattern()//KTV模式
{
cout << "KTV模式启动中,请稍后!" << endl;
ds->On();
d->Off();
mkf->On();
yx->On();
dvd->On();
}
void GamePattern() //游戏机模式
{
cout << "游戏机模式启动中,请稍后!" << endl;
ds->On();
yx->On();
yxj->On();
}
~Facade() {
delete ds;
delete yxj;
delete mkf;
delete yx;
delete d;
delete dvd;
}
private:
Television*ds;
Gamemachine*yxj;
Microphone*mkf;
Sound*yx;
Light*d;
DVD*dvd;
};
void test() {
Facade*myFacade = new Facade;
myFacade->KTVPattern();
myFacade->GamePattern();
}
void main() {
test();
}
效果图: