定义
外观模式(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; }