- A+
所属分类:IT技术
介绍
门面设计模式也称外观模式,是比较简单的结构型设计模式。该设计模式提供一个同意的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用。
如图所示,subsystem中各个子系统提供了不同的接口,如果这些接口被client直接使用,那么client将会直接依赖子系统,如此多的子系统一旦发生变化,那么上层client也会受到影响。使用中间层Facade作为访问介质,子系统的变化不会直接影响到上层client,只需修改中间层Facade即可。
代码
- #include <iostream>
- using namespace std;
- class Camera{
- public:
- void turnOn(){
- cout<<"Camera turnOn"<<endl;
- }
- void turnOff(){
- cout<<"Camera turnOff"<<endl;
- }
- };
- class Light{
- public:
- void turnOn(){
- cout<<"Light turnOn"<<endl;
- }
- void turnOff(){
- cout<<"Light turnOff"<<endl;
- }
- };
- class Sensor{
- public:
- void active(){
- cout<<"Sensor active"<<endl;
- }
- void deactive(){
- cout<<"Sensor deactive"<<endl;
- }
- };
- class Alarm{
- public:
- void active(){
- cout<<"Alarm active"<<endl;
- }
- void deactive(){
- cout<<"Alarm deactive"<<endl;
- }
- };
- //此为中间层,封装了各个模块的接口
- //对使用者屏蔽复杂的接口,为使用者提供简单的访问接口
- class SecurityFacade{
- public:
- SecurityFacade(){
- Camera* camera = new Camera;
- Light* light = new Light;
- Sensor* sensor = new Sensor;
- Alarm* alarm = new Alarm;
- }
- void active(){
- camera->turnOn();
- light->turnOn();
- sensor->active();
- alarm->active();
- }
- void deactive(){
- alarm->deactive();
- sensor->deactive();
- light->turnOff();
- camera->turnOff();
- }
- private:
- Camera* camera;
- Light* light;
- Sensor* sensor;
- Alarm* alarm;
- };
- int main()
- {
- SecurityFacade facade;
- cout<<"-----Start System-----"<<endl;
- facade.active();
- cout<<"-----Shutdown System-----"<<endl;
- facade.deactive();
- system("pause");
- exit(0);
- }
运行结果:
- -----Start System-----
- Camera turnOn
- Light turnOn
- Sensor active
- Alarm active
- -----Shutdown System-----
- Alarm deactive
- Sensor deactive
- Light turnOff
- Camera turnOff
总结
门面设计模式主要依据的是LOD法则。