c++设计模式概述之外观
类写的不够规范,目的是缩短篇幅,请实际中不要这样做。
1、概述
了解外观模式相关概念后,一下子想到的是主板, 主板上有各种元器件,各种指示灯,各种电容,各种电路。然而,主板供电的接口就一个,其他元器件需要用电的都是从这里获取电源。比如,风扇,LED灯。要是我们单独出来,把每一个元器件单独通电,那主板上得有多少个接口啊, 主板直接通电接口就一个,省却很多麻烦。
现实中, 可能会遇到类似上面的情况,需要 一个接口调用 多个子系统的接口。
下面开始范例, 以主板为例,电扇和LED灯组为子系统, 主板上存在一个假想的开关,控制子系统的电源通断(on off 函数)。
2、元器件类,
元器件可以通断电
// 电器 具有通电和断电的功能 class equipment { public: virtual void on() = 0; virtual void off() = 0; };
3、LED灯类
// 电灯 class ep_bulb : public equipment { public: void on() { cout << "\n电灯打开了\n"; } void off() { cout << "\n 电灯关闭了 \n"; } };
4、风扇
// 风扇 class ep_fan : public equipment { public: void on() { cout << "\n风扇打开了\n"; } void off() { cout << "\n 风扇关闭了 \n"; } };
5、主板上的一个电源控制开关
// 电源开关集合接口 class power_switch : public equipment { public: // 电源开关中添加下面两组电器 power_switch() { equipment *pinstance = nullptr; // 添加电灯 pinstance = new ep_bulb; if (!pinstance) cout << "电灯创建失败"; else _plist_ep.push_back(pinstance); pinstance = nullptr; pinstance = new ep_fan; if (!pinstance) cout << "电扇创建失败"; else _plist_ep.push_back(pinstance); } virtual ~power_switch() { for each(auto index in _plist_ep) { if (index) { delete index; index = nullptr; } } } // ------------------------------------------------------------------------------- // 对外提供的统一接口 // ------------------------------------------------------------------------------- // 通电 void on() { for each(auto index in _plist_ep) index->on(); } // 断电 void off() { for each(auto index in _plist_ep) index->off(); } private: list<equipment* > _plist_ep; };
6、调用示例
void call_facade() { std::unique_ptr<equipment> ppower_switch(new(std::nothrow) power_switch); if (!ppower_switch) { cout << "\n 电源开关创建失败 \n"; return; } // cout << "主板通电结果:"; ppower_switch->on(); cout << "\n\n\n\n主板断电结果:"; ppower_switch->off(); }
7、输出结果: