jack-wang
小王
C++博客
首頁
新隨筆
聯系
聚合
管理
隨筆-380 評論-37 文章-0 trackbacks-0
常見設計模式的解析和實現(C++)之十四-Command模式
轉:
http://www.shnenglu.com/converse/archive/2006/08/04/10855.html
作用:
將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日志,以及支持可撤消的操作.
UML結構圖:
解析:
Comnand模式的思想是把命令封裝在一個類中,就是這里的Command基類,同時把接收對象也封裝在一個類中就是這里的Receiver類中,由調用這個命令的類也就是這里的Invoker類來調用.其實,如果弄清楚了Command模式的原理,就會發現其實它和注冊回調函數的原理是很相似的,而在面向過程的設計中的回調函數其實和這里的Command類的作用是一致的.采用Command模式解耦了命令的發出者和命令的執行者.
實現:
1)Command.h
/**/
/*
*******************************************************************
created: 2006/08/04
filename: Command.h
author: 李創
http://www.shnenglu.com/converse/
purpose: Command模式的演示代碼
********************************************************************
*/
#ifndef COMMAND_H
#define
COMMAND_H
class
Command
{
public
:
virtual
~
Command()
{}
virtual
void
Execute()
=
0
;
}
;
class
Receiver
{
public
:
void
Action();
}
;
class
Invoker
{
public
:
Invoker(Command
*
pCommand);
~
Invoker();
void
Invoke();
private
:
Command
*
m_pCommand;
}
;
class
ConcreateComand
:
public
Command
{
public
:
ConcreateComand(Receiver
*
pReceiver);
virtual
~
ConcreateComand();
virtual
void
Execute();
private
:
Receiver
*
m_pReceiver;
}
;
#endif
2)Command.cpp
/**/
/*
*******************************************************************
created: 2006/08/04
filename: Command.cpp
author: 李創
http://www.shnenglu.com/converse/
purpose: Command模式的演示代碼
********************************************************************
*/
#include
"
Command.h
"
#include
<
iostream
>
void
Receiver::Action()
{
std::cout
<<
"
Receiver Action\n
"
;
}
Invoker::Invoker(Command
*
pCommand)
: m_pCommand(pCommand)
{
}
Invoker::
~
Invoker()
{
delete m_pCommand;
m_pCommand
=
NULL;
}
void
Invoker::Invoke()
{
if
(NULL
!=
m_pCommand)
{
m_pCommand
->
Execute();
}
}
ConcreateComand::ConcreateComand(Receiver
*
pReceiver)
: m_pReceiver(pReceiver)
{
}
ConcreateComand::
~
ConcreateComand()
{
delete m_pReceiver;
m_pReceiver
=
NULL;
}
void
ConcreateComand::Execute()
{
if
(NULL
!=
m_pReceiver)
{
m_pReceiver
->
Action();
}
std::cout
<<
"
Execute by ConcreateComand\n
"
;
}
3)Main.cpp
/**/
/*
*******************************************************************
created: 2006/08/04
filename: main.cpp
author: 李創
http://www.shnenglu.com/converse/
purpose: Command模式的測試代碼
********************************************************************
*/
#include
"
Command.h
"
#include
<
stdlib.h
>
int
main()
{
Receiver
*
pReceiver
=
new
Receiver();
Command
*
pCommand
=
new
ConcreateComand(pReceiver);
Invoker
*
pInvoker
=
new
Invoker(pCommand);
pInvoker
->
Invoke();
delete pInvoker;
system(
"
pause
"
);
return
0
;
}
posted on 2011-08-05 01:50
小王
閱讀(330)
評論(0)
編輯
收藏
引用
所屬分類:
設計模式
只有注冊用戶
登錄
后才能發表評論。
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
相關文章:
常見設計模式的解析和實現(C++)之十四-Command模式
常見設計模式的解析和實現(C++)之十二-ChainOfResponsibility模式
Command模式
Adapter模式
Facade模式
抽象工廠(Abstract Factory)
工廠方法(factory-method)模式
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
<
2017年12月
>
日
一
二
三
四
五
六
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
(16)
給我留言
查看公開留言
查看私人留言
隨筆分類
(442)
Android(7)
Boost(8)
C#
c++ 程序設計基礎(11)
CMake(2)
Cocos2d-X(1)
CUDA(2)
DB(21)
DirectX(2)
Docker(5)
Dubbo(3)
Erlang(5)
Git(6)
GO(1)
IE(1)
iOS(1)
Java(19)
JPA(2)
LibTorch(1)
linux(99)
MQTT(2)
node.js(3)
OpenGL(2)
Python(15)
Qt(7)
Redis(5)
ROS(4)
ROS2(1)
SpringBoot(4)
TensorRT(3)
UI(5)
Unreal Engine(1)
VC(44)
VLC(2)
Web開發(12)
Win32(4)
編譯(34)
操作系統(3)
調試(2)
多核編程(3)
分布式系統(4)
匯編(1)
腳本(1)
開源項目(3)
其他(16)
嵌入式(1)
軟件工程(5)
瑞芯微(1)
設計模式(7)
昇騰(1)
算法與數據結構(1)
網絡通訊(17)
音視頻(7)
游戲服務器端開發(17)
游戲引擎(7)
隨筆檔案
(380)
2025年5月 (1)
2024年11月 (2)
2024年10月 (1)
2024年6月 (2)
2024年5月 (4)
2024年4月 (4)
2024年3月 (9)
2024年2月 (1)
2024年1月 (6)
2023年12月 (2)
2023年10月 (8)
2023年9月 (1)
2023年7月 (2)
2023年5月 (1)
2023年4月 (3)
2023年3月 (2)
2022年12月 (2)
2022年11月 (3)
2022年10月 (3)
2022年9月 (5)
2022年8月 (2)
2022年7月 (10)
2022年6月 (5)
2022年5月 (7)
2022年4月 (4)
2022年3月 (1)
2022年2月 (11)
2022年1月 (6)
2021年12月 (7)
2021年10月 (3)
2021年6月 (2)
2021年4月 (1)
2021年3月 (3)
2021年2月 (1)
2021年1月 (3)
2020年12月 (2)
2020年11月 (1)
2020年10月 (2)
2020年9月 (2)
2020年7月 (4)
2020年6月 (2)
2020年4月 (3)
2020年3月 (2)
2020年2月 (2)
2020年1月 (3)
2019年11月 (2)
2019年10月 (5)
2019年9月 (1)
2019年8月 (3)
2019年7月 (1)
2019年6月 (6)
2019年5月 (4)
2019年4月 (2)
2019年3月 (2)
2019年2月 (1)
2019年1月 (4)
2018年1月 (2)
2017年12月 (8)
2017年11月 (3)
2017年9月 (4)
2017年8月 (1)
2017年3月 (1)
2017年2月 (2)
2017年1月 (5)
2016年12月 (1)
2016年5月 (1)
2016年4月 (1)
2016年1月 (1)
2015年8月 (3)
2015年6月 (1)
2015年5月 (1)
2015年4月 (1)
2014年7月 (2)
2014年6月 (2)
2014年5月 (1)
2014年3月 (1)
2014年2月 (2)
2013年11月 (3)
2013年9月 (4)
2013年8月 (1)
2013年6月 (1)
2013年5月 (1)
2013年4月 (3)
2013年3月 (5)
2013年2月 (1)
2013年1月 (2)
2012年11月 (1)
2012年10月 (3)
2012年9月 (1)
2012年7月 (3)
2012年6月 (3)
2012年5月 (1)
2012年3月 (5)
2012年2月 (2)
2012年1月 (1)
2011年12月 (3)
2011年9月 (1)
2011年8月 (2)
2011年6月 (1)
2011年4月 (1)
2011年3月 (2)
2011年2月 (2)
2010年12月 (1)
2010年11月 (7)
2010年10月 (7)
2010年9月 (2)
2010年8月 (2)
2010年7月 (3)
2010年6月 (2)
2010年4月 (4)
2010年3月 (6)
2010年2月 (12)
2010年1月 (22)
2009年11月 (6)
2009年8月 (5)
2009年6月 (2)
2009年2月 (4)
2009年1月 (15)
2008年10月 (1)
Linux
chinaunix
游戲開發
金慶
云風
綜合
Intel
λ-calculus
周偉明
最新隨筆
1.?ROS2開發環境搭建
2.?dnf安裝失敗
3.?RK3588設備中運行可執行程序報錯:error while loading shared libraries: librknnrt.so: cannot open shared object file:
4.?wget下載報錯:The certificate of ‘www.python.org’ is not trusted.
5.?執行torch.load(模型名稱, map_location='cpu')報錯:from torchvision.transforms.functional_tensor import rgb_to_grayscale
6.?pip安裝basicsr報錯:To fix this you could try to:
7.?cmake文件中D_GLIBCXX_USE_CXX11_ABI=0,導致無法到入第三方庫libjsoncpp.so
8.?鏈接libjsoncpp.a時報錯:which may bind externally can not be used when making a shared object; recompile with -fPIC
9.?vs code中git push代碼報錯:Missing or invalid credentials.
10.?git clone報錯:SSL certificate problem: self signed certificate in certificate chain
搜索
最新隨筆
1.?ROS2開發環境搭建
2.?dnf安裝失敗
3.?RK3588設備中運行可執行程序報錯:error while loading shared libraries: librknnrt.so: cannot open shared object file:
4.?wget下載報錯:The certificate of ‘www.python.org’ is not trusted.
5.?執行torch.load(模型名稱, map_location='cpu')報錯:from torchvision.transforms.functional_tensor import rgb_to_grayscale
6.?pip安裝basicsr報錯:To fix this you could try to:
7.?cmake文件中D_GLIBCXX_USE_CXX11_ABI=0,導致無法到入第三方庫libjsoncpp.so
8.?鏈接libjsoncpp.a時報錯:which may bind externally can not be used when making a shared object; recompile with -fPIC
9.?vs code中git push代碼報錯:Missing or invalid credentials.
10.?git clone報錯:SSL certificate problem: self signed certificate in certificate chain
最新評論
1.?re: DirectUI Lib XML編寫說明
這個不錯,很有用。
--dictbox
2.?re: MFC:為CListCtrl添加背景圖片[未登錄]
沒用
--123
3.?re: DirectUI Lib XML編寫說明[未登錄]
很好,對于我這樣的初學者很用幫助,謝謝樓主
--king
4.?re: WindowXP下PHP5開發環境配置
謝謝樓主分享,已經按樓主的方法配置成功
--bbreay
5.?re: error C2220: 警告被視為錯誤 - 沒有生成“object”文件
你好,我用的是vs2012,沒有你說的“選擇該cpp”,如:
--coco
閱讀排行榜
1.?protobuf使用方法(9431)
2.?執行pip install報錯: WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv(9023)
3.?1>c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(24) : fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d](8641)
4.?編譯cmake報錯:Cannot find a C++ compiler that supports both C++11 and the specified C++ flags.(8288)
5.?把python3的版本從3.6升級到3.10(7333)
評論排行榜
1.?網游服務器通信架構的設計(3)
2.?公司散伙啦。杯具!反思!(3)
3.?Ubuntu9.10 VI下方向鍵變成ABCD的解決辦法(3)
4.?kosmix,又一個開源的類似GFS的分布式文件系統(2)
5.?服務器宕機(2)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 小王
91麻豆国产精品91久久久
|
99久久er这里只有精品18
|
国产精品亚洲综合专区片高清久久久
|
一本综合久久国产二区
|
综合久久久久久中文字幕亚洲国产国产综合一区首
|
av午夜福利一片免费看久久
|
人人狠狠综合久久亚洲婷婷
|
亚洲人成电影网站久久
|
亚洲国产精品高清久久久
|
久久综合综合久久狠狠狠97色88
|
国产99久久久国产精品~~牛
|
色狠狠久久综合网
|
欧美一区二区精品久久
|
伊人色综合久久天天人守人婷
|
久久99热只有频精品8
|
久久久久女教师免费一区
|
麻豆AV一区二区三区久久
|
欧美精品一区二区久久
|
99久久国语露脸精品国产
|
国内精品伊人久久久影院
|
一本色道久久88加勒比—综合
|
久久久久亚洲AV片无码下载蜜桃
|
色综合久久久久
|
波多野结衣中文字幕久久
|
久久亚洲AV无码精品色午夜
|
国产高清美女一级a毛片久久w
|
日韩精品久久久肉伦网站
|
久久综合五月丁香久久激情
|
伊人久久综在合线亚洲2019
|
午夜天堂av天堂久久久
|
国产精品久久久久久久app
|
精品久久久久中文字
|
国产精品久久久久久搜索
|
久久久久久久人妻无码中文字幕爆
|
香蕉99久久国产综合精品宅男自
|
999久久久国产精品
|
亚洲乱亚洲乱淫久久
|
青青草国产成人久久91网
|
久久综合九色综合精品
|
久久青草国产精品一区
|
秋霞久久国产精品电影院
|