//依 CSDN刘伟技术博客,C++命令模式示例如下:
1 // Client.cpp
2
3 #include <iostream>
4 #include <string.h>
5
6 #include <FBSettingWindow.h>
7 #include <FunctionButton.h>
8 #include <Command.h>
9
10 int main(void)
11 {
12 //面板
13 FBSettingWindow* fbsw = new FBSettingWindow("function key set panel");
14
15 //键号
16 FunctionButton* fb1 = new FunctionButton("KEY 1");
17 FunctionButton* fb2 = new FunctionButton("KEY 2");
18
19 //功能
20 Command* command1 = new HelpCommand;
21 Command* command2 = new MinimizeCommand;
22
23 //键号--功能
24 fb1->setCommand(command1);
25 fb2->setCommand(command2);
26
27 //面把上添加功能键
28 fbsw->addFunctionButton(fb1);
29 fbsw->addFunctionButton(fb2);
30
31 //调用功能键的业务方法
32 fb1->onClick();
33 fb2->onClick();
34
35 delete command2;
36 delete command1;
37 delete fb2;
38 delete fb1;
39 delete fbsw;
40 return 0;
41 }
1 // Command.cpp
2
3 #include <iostream>
4 #include <string.h>
5
6 #include <Command.h>
7 using namespace std;
8
9 MinimizeCommand::MinimizeCommand(void): whObj(NULL)
10 {
11 whObj = new WindowHandler;
12 }
13
14 MinimizeCommand::~MinimizeCommand(void)
15 {
16 if(whObj)
17 delete whObj;
18 }
19
20 //命令执行方法:将调用请求接收者的业务方法
21 void MinimizeCommand::execute(void)
22 {
23 whObj->minimize();
24 }
25
26 HelpCommand::HelpCommand(void): hhObj(NULL)
27 {
28 hhObj = new HelpHandler;
29 }
30
31 //命令执行方法:将调用请求接收者的业务方法
32 void HelpCommand::execute(void)
33 {
34 hhObj->display();
35 }
36
37 HelpCommand::~HelpCommand(void)
38 {
39 if(hhObj)
40 delete hhObj;
41 }
1 // FBSettingWindow.cpp
2
3 #include <iostream>
4 #include <string.h>
5
6 #include <FBSettingWindow.h>
7 using namespace std;
8 //功能设置窗口类
9 FBSettingWindow::FBSettingWindow(void):title(NULL), functionButtons({NULL}) {}
10
11 FBSettingWindow::~FBSettingWindow(void)
12 {
13 if(title)
14 delete[]title;
15 }
16
17 FBSettingWindow::FBSettingWindow(const char* str): title(NULL), functionButtons({NULL})
18 {
19 title = new char[strlen(str) + 1];
20 strcpy(title, str);
21 }
22
23 void FBSettingWindow::setTitle(const char *str)
24 {
25 if(str != NULL)
26 delete[] str;
27 title = new char[strlen(str) + 1];
28 strcpy(title, str);
29 }
30
31 const char* FBSettingWindow::getTitle(void)const
32 {
33 return title;
34 }
35
36 void FBSettingWindow::addFunctionButton(FunctionButton* fb)
37 {
38 int size = sizeof(functionButtons) / sizeof(functionButtons[0]);
39 int i = 0;
40 while(i < size)
41 {
42 if(functionButtons[i] == NULL)
43 break;
44 i++;
45 }
46
47 if(i < size)
48 functionButtons[i] = fb;
49 }
50
51 void FBSettingWindow::removeFunctionButton(FunctionButton* fb)
52 {
53 int size = sizeof(functionButtons) / sizeof(functionButtons[0]);
54 int i = 0;
55 while(i < size)
56 {
57 if(functionButtons[i] == fb)
58 break;
59 i++;
60 }
61
62 if(i < size)
63 functionButtons[i] = NULL;
64
65 }
66
67 //显示窗口及功能键
68 void FBSettingWindow::display(void)
69 {
70 cout << "show window " << title << endl;
71 cout << "show function keys" << endl;
72 int size = sizeof(functionButtons) / sizeof(functionButtons[0]);
73 int i = 0;
74 while(i < size)
75 {
76 if(functionButtons[i] != NULL)
77 {
78 cout << functionButtons[i]->getName() << endl;
79 }
80 i++;
81 }
82 }
1 // FunctionButton.cpp
2
3 #include <iostream>
4 #include <string.h>
5 #include <FunctionButton.h>
6
7 using namespace std;
8 //功能键类:请求发送者
9 FunctionButton::FunctionButton(const char* str):name(NULL), command(NULL)
10 {
11 name = new char[strlen(str) + 1];
12 strcpy(name, str);
13 }
14
15 FunctionButton::~FunctionButton(void)
16 {
17 if(name)
18 delete[]name;
19 }
20
21 const char* FunctionButton::getName(void)const
22 {
23 return name;
24 }
25
26 //为功能键注入命令
27 void FunctionButton::setCommand(Command* cmd)
28 {
29 command = cmd;
30 }
31
32 //发送请求的方法
33 void FunctionButton::onClick(void)
34 {
35 cout << "click function key" << endl;
36 command->execute();
37 }
1 // HelpHandler.cpp
2
3 #include <iostream>
4 #include <string.h>
5 #include <HelpHandler.h>
6
7 using namespace std;
8 //帮助文档处理类:请求接收者
9 void HelpHandler::display(void)
10 {
11 cout << "show help document" << endl;
12 }
1 // WindowHandler.cpp
2
3 #include <iostream>
4 #include <string.h>
5
6 #include <WindowHandler.h>
7 using namespace std;
8
9 //窗口处理类:请求接收者
10 void WindowHandler::minimize(void)
11 {
12 cout << "minimize window size" << endl;
13 }