每天一个设计模式之门面模式 Qt系列教程

  • A+
所属分类:Qt系列教程

介绍

门面设计模式也称外观模式,是比较简单的结构型设计模式。该设计模式提供一个同意的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用。

每天一个设计模式之门面模式 Qt系列教程

如图所示,subsystem中各个子系统提供了不同的接口,如果这些接口被client直接使用,那么client将会直接依赖子系统,如此多的子系统一旦发生变化,那么上层client也会受到影响。使用中间层Facade作为访问介质,子系统的变化不会直接影响到上层client,只需修改中间层Facade即可。

代码

  1. #include <iostream>
  2. using namespace std;
  3. class Camera{
  4. public:
  5.     void turnOn(){
  6.         cout<<"Camera turnOn"<<endl;
  7.     }
  8.     void turnOff(){
  9.         cout<<"Camera turnOff"<<endl;
  10.     }
  11. };
  12. class Light{
  13. public:
  14.     void turnOn(){
  15.         cout<<"Light turnOn"<<endl;
  16.     }
  17.     void turnOff(){
  18.         cout<<"Light turnOff"<<endl;
  19.     }
  20. };
  21. class Sensor{
  22. public:
  23.     void active(){
  24.         cout<<"Sensor active"<<endl;
  25.     }
  26.     void deactive(){
  27.         cout<<"Sensor deactive"<<endl;
  28.     }
  29. };
  30. class Alarm{
  31. public:
  32.     void active(){
  33.         cout<<"Alarm active"<<endl;
  34.     }
  35.     void deactive(){
  36.         cout<<"Alarm deactive"<<endl;
  37.     }
  38. };
  39. //此为中间层,封装了各个模块的接口
  40. //对使用者屏蔽复杂的接口,为使用者提供简单的访问接口
  41. class SecurityFacade{
  42. public:
  43.     SecurityFacade(){
  44.         Camera* camera = new Camera;
  45.         Light* light = new Light;
  46.         Sensor* sensor = new Sensor;
  47.         Alarm* alarm = new Alarm;
  48.     }
  49.     void active(){
  50.         camera->turnOn();
  51.         light->turnOn();
  52.         sensor->active();
  53.         alarm->active();
  54.     }
  55.     void deactive(){
  56.         alarm->deactive();
  57.         sensor->deactive();
  58.         light->turnOff();
  59.         camera->turnOff();
  60.     }
  61. private:
  62.     Camera* camera;
  63.     Light* light;
  64.     Sensor* sensor;
  65.     Alarm* alarm;
  66. };
  67. int main()
  68. {
  69.     SecurityFacade facade;
  70.     cout<<"-----Start System-----"<<endl;
  71.     facade.active();
  72.     cout<<"-----Shutdown System-----"<<endl;
  73.     facade.deactive();
  74.     system("pause");
  75.     exit(0);
  76. }

运行结果:

  1. -----Start System-----
  2. Camera turnOn
  3. Light turnOn
  4. Sensor active
  5. Alarm active
  6. -----Shutdown System-----
  7. Alarm deactive
  8. Sensor deactive
  9. Light turnOff
  10. Camera turnOff

总结

门面设计模式主要依据的是LOD法则。

每天一个设计模式之门面模式 Qt系列教程

Qt大课堂-QtShare

发表评论

您必须登录才能发表评论!