facade pattern--外观模式

 

facade pattern--外观模式

分类: 设计模式   205人阅读  评论(0)  收藏  举报
设计模式
facade pattern称为外观模式下面这幅图很能说明该模式用于什么地方。
facade pattern--外观模式_第1张图片
A方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和个子系统的演化,这种过多的耦合面临很多变化的挑战。Facade设计模式则简化外部客户程序和系统间的交互接口,将外部客户程序的演化和内部子系统的变化之间的依赖相互解耦。
Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use--GoF
facade pattern--外观模式_第2张图片
举例一个汽车有一个发动机子系统,刹车系统,点火系统,燃料供给系统,地盘系统,车灯系统等等系统组成。
我们一般是启动点火系统->燃料公给系统->发动机子系统->地盘系统  形成汽车的启动
停车:刹车系统->发动机系统->燃料供给系统->车灯系统
转弯:发动机系统->地盘系统->车灯系统
如果教我们客户一个个去完成汽车的个个操作,过程是调用各个子系统,一方面造成客户操作依赖这些子系统,同时造成操作复杂化。
引入外观模式相当于为该汽车引入语音控制系统。
客户喊出:“启动” 由语音系统完成对各个子系统的调用,完成启动动作
客户喊出:“停车” 由语音系统完成各个子系统的调用完成停车动作
客户喊出:  “左转弯” .....
等等一些简单的操作命令。这些命令相当于接口,由客户直接调用。帮助客户使用这些子系统。
[cpp] view plain copy
  1. class brakeSystem  
  2. {  
  3.     public:  
  4.         void Start( );  
  5.         void Stop( );  
  6. };  
  7. void brakeSystem::Start( )  
  8. {  
  9.     std::cout<<"brake Open"<<std::endl;  
  10. }  
  11. void brakeSystem::Stop( )  
  12. {  
  13.     std::cout<<"brake Close"<<std::endl;  
  14. }  
  15.   
  16. class lightSystem  
  17. {  
  18.     public:  
  19.         void Start( );  
  20.         void Stop( );    
  21. };  
  22. void lightSystem::Start( )  
  23. {  
  24.     std::cout<<"light Start"<<std::endl;  
  25. }  
  26. void lightSystem::Stop( )  
  27. {  
  28.     std::cout<<"light Stop"<<std::endl;  
  29. }  
  30.   
  31. class engineSystem  
  32. {  
  33.   public:  
  34.         void Start( );  
  35.         void Change( );  
  36.         void Stop( );    
  37. };  
  38. void engineSystem::Start( )  
  39. {  
  40.     std::cout<<"engine Start"<<std::endl;  
  41. }  
  42. void engineSystem::Stop( );  
  43. {  
  44.     std::cout<<"engine Stop"<<std::endl;  
  45. }  
  46. void engineSystem::Change( )  
  47. {  
  48.     std::cout<<"engine Change"<<std::endl;  
  49. }  
  50.   
  51. class fuelSystem  
  52. {  
  53.   public:  
  54.       void Start( );  
  55.       void Stop( );          
  56. };  
  57. void fuelSystem::Start( )  
  58. {  
  59.     std::cout<<"fuel Open"<<std::endl;  
  60. }  
  61. void fuelSystem::Stop( )  
  62. {  
  63.     std::cout<<"fuel Close"<<std::endl;  
  64. }  
  65.   
  66. class fireSystem  
  67. {  
  68.     public:  
  69.         void fireStart( );  
  70.         void fireStop( );  
  71. };  
  72. void fireSystem::Start( )  
  73. {  
  74.     std::cout<<"fire Start"<<std::endl;  
  75. }  
  76. void fireSystem::Stop( )  
  77. {  
  78.     std::cout<<"fire Stop"<<std::endl;  
  79. }  
  80.   
  81. class domainSystem  
  82. {  
  83.     public:  
  84.         void Start( );  
  85.         void Stop( );  
  86. };  
  87. void domainSystem::Start( )  
  88. {  
  89.     std::cout<<"domain Start"<<std::endl;  
  90. }  
  91. void domainSystem::Stop( )  
  92. {  
  93.     std::cout<<"domain Stop"<<std::endl;  
  94. }  
  95.   
  96. class voiceSystem  
  97. {  
  98.     public:  
  99.         voiceSystem( );  
  100.         ~voiceSystem( );  
  101.         void carStart( );  
  102.         void carStop( );  
  103.         void carTurnLeft( );  
  104.     private:  
  105.         brakeSystem * bs;  
  106.         engineSystem *es;  
  107.         fireSystem *fs;  
  108.         domainSystem *ds;  
  109.         fuleSystem *fus;  
  110.         lightSystem *ls;  
  111. }  
  112. voiceSystem::voiceSystem( )  
  113. :bs(new brakeSystem( )),  
  114.  es(new engineSystem( )),  
  115.  fs(new fireSystem( )),  
  116.  ds(new domain( )),  
  117.  fus(new fuleSystem( )),  
  118.  ls(new lightSystem( )  
  119. {}  
  120. voiceSystem::~voiceSystem( )  
  121. {  
  122.     delete bs;  
  123.     delete es;  
  124.     delete fs;  
  125.     delete ds;  
  126.     delete fus;  
  127.     delete ls;  
  128. }  
  129. voiceSystem::carStart( )  
  130. {  
  131.     //点火子系统  
  132.     fs->Start( );  
  133.     fs->Stop( );  
  134.     //燃料子系统  
  135.     fus->Start( );  
  136.     //发动机子系统  
  137.     es->Start( );  
  138.     //地盘子系统  
  139.     ds->Start( );  
  140. }  
  141. voiceSystem::carStop( )  
  142. {  
  143.     //刹车子系统  
  144.     bs->Start( );  
  145.     //发动机子系统  
  146.     es->Stop( );  
  147.     //燃料子系统  
  148.     fus->Stop( );  
  149.     //刹车子系统  
  150.     bs->Stop( );  
  151.     //车灯子系统  
  152.     ls->Start( );  
  153.     ls->Stop( );  
  154. }  
  155. voiceSystem::carTurnLeft( )  
  156. {  
  157.     //发动机子系统  
  158.     es->Change( );  
  159.     //地盘系统  
  160.     ds->Start( );  
  161.     //车灯子系统  
  162.     ls->Start( );  
  163.     ls->Stop( );  
  164. }  
  165.   
  166. int main( int argc,char ** argv)  
  167. {  
  168.     vocieSystem vs;  
  169.     vs.carStart( );  
  170.     vs.carTurnLeft( );  
  171.     vs.carStop( );  
  172.     return 0;  
  173. }  
 

你可能感兴趣的:(设计模式)