外观模式
将函数功能/方法进行组合。
如:
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <iostream> 3 4 using namespace std; 5 6 class SysA 7 { 8 public: 9 void operationA() { 10 cout << "sysA。。。" << endl; 11 } 12 }; 13 14 class SysB 15 { 16 public: 17 void operationB() { 18 cout << "sysB。。。" << endl; 19 } 20 }; 21 22 class SysC 23 { 24 public: 25 void operationC() { 26 cout << "sysC。。。" << endl; 27 } 28 }; 29 30 class SysD 31 { 32 public: 33 void operationD() { 34 cout << "sysD。。。" << endl; 35 } 36 }; 37 38 class Facade 39 { 40 public: 41 void methodOne() 42 { 43 sysa.operationA(); 44 sysb.operationB(); 45 } 46 47 void methodTwo() 48 { 49 sysc.operationC(); 50 sysd.operationD(); 51 } 52 53 private: 54 SysA sysa; 55 SysB sysb; 56 SysC sysc; 57 SysD sysd; 58 }; 59 60 int main(void) 61 { 62 /* 63 SysA sa; 64 SysB sb; 65 sa.operationA(); 66 sb.operationB(); 67 */ 68 69 Facade fa; 70 //AB 方法组合 71 fa.methodOne(); 72 73 //CD 组合 74 fa.methodTwo(); 75 76 return 0; 77 }
在类中将各个功能方法组合成各自的函数,调用即可。如家里影院模式,需要切换两种模式,两种模式下的各个设备的状态就可作为模式下的子函数。
代码:
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <iostream> 3 4 using namespace std; 5 6 7 /* 8 根据类图,实现家庭影院外观模式应用。 9 实现KTV模式:电视打开,灯关掉,音响打开,麦克风打开,dvd打开; 10 实现游戏模式:电视打开,音响打开,游戏机打开。 11 */ 12 class TV 13 { 14 public: 15 void On() { 16 cout << "电视打开了" << endl; 17 } 18 void Off() { 19 cout << "电视关闭了" << endl; 20 } 21 }; 22 class DVD 23 { 24 public: 25 void On() { 26 cout << "DVD打开了" << endl; 27 } 28 void Off() { 29 cout << "DVD关闭了" << endl; 30 } 31 }; 32 33 class Xbox 34 { 35 public: 36 void On() { 37 cout << "Xbox打开了" << endl; 38 } 39 void Off() { 40 cout << "Xbox关闭了" << endl; 41 } 42 }; 43 44 class MikePhone 45 { 46 public: 47 void On() { 48 cout << "MikePhone打开了" << endl; 49 } 50 void Off() { 51 cout << "MikePhone关闭了" << endl; 52 } 53 }; 54 55 class Light 56 { 57 public: 58 void On() { 59 cout << "Light打开了" << endl; 60 } 61 void Off() { 62 cout << "Light关闭了" << endl; 63 } 64 }; 65 66 67 class HomePlayer 68 { 69 public: 70 //ktv模式的接口 71 void doKTV() { 72 light.Off(); 73 tv.On(); 74 dvd.On(); 75 } 76 //游戏模式的接口 77 void doGame() 78 { 79 tv.On(); 80 xbox.On(); 81 } 82 Light light; 83 TV tv; 84 MikePhone mike; 85 Xbox xbox; 86 DVD dvd; 87 }; 88 89 int main(void) 90 { 91 HomePlayer hp; 92 93 cout << "进入ktv模式" << endl; 94 hp.doKTV(); 95 96 cout << "进入游戏模式" << endl; 97 hp.doGame(); 98 99 return 0; 100 }