外观模式

将函数功能/方法进行组合。

如:

 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 }

 

posted @ 2020-03-24 09:12  撑雨伞的小男孩  阅读(135)  评论(0编辑  收藏  举报