现在的位置: 首页 > 综合 > 正文

命令模式——示例——实现

2012年10月15日 ⁄ 综合 ⁄ 共 3629字 ⁄ 字号 评论关闭
//依 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 }

 

抱歉!评论已关闭.