jack-wang
小王
C++博客
首頁
新隨筆
聯系
聚合
管理
隨筆-379 評論-37 文章-0 trackbacks-0
常見設計模式的解析和實現(C++)之十四-Command模式
轉:
http://m.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://m.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://m.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://m.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
小王
閱讀(322)
評論(0)
編輯
收藏
引用
所屬分類:
設計模式
只有注冊用戶
登錄
后才能發表評論。
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
相關文章:
常見設計模式的解析和實現(C++)之十四-Command模式
常見設計模式的解析和實現(C++)之十二-ChainOfResponsibility模式
Command模式
Adapter模式
Facade模式
抽象工廠(Abstract Factory)
工廠方法(factory-method)模式
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
<
2022年4月
>
日
一
二
三
四
五
六
27
28
29
30
31
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
1
2
3
4
5
6
7
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
(16)
給我留言
查看公開留言
查看私人留言
隨筆分類
(441)
Android(7)
Boost(8)
C#
c++ 程序設計基礎(11)
CMake(2)
Cocos2d-X(1)
CUDA(3)
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)
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)
網絡通訊(17)
音視頻(7)
游戲服務器端開發(17)
游戲引擎(7)
隨筆檔案
(379)
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.?dnf安裝失敗
2.?RK3588設備中運行可執行程序報錯:error while loading shared libraries: librknnrt.so: cannot open shared object file:
3.?wget下載報錯:The certificate of ‘www.python.org’ is not trusted.
4.?執行torch.load(模型名稱, map_location='cpu')報錯:from torchvision.transforms.functional_tensor import rgb_to_grayscale
5.?pip安裝basicsr報錯:To fix this you could try to:
6.?cmake文件中D_GLIBCXX_USE_CXX11_ABI=0,導致無法到入第三方庫libjsoncpp.so
7.?鏈接libjsoncpp.a時報錯:which may bind externally can not be used when making a shared object; recompile with -fPIC
8.?vs code中git push代碼報錯:Missing or invalid credentials.
9.?git clone報錯:SSL certificate problem: self signed certificate in certificate chain
10.?openEuler系統中修改系統時間
搜索
最新隨筆
1.?dnf安裝失敗
2.?RK3588設備中運行可執行程序報錯:error while loading shared libraries: librknnrt.so: cannot open shared object file:
3.?wget下載報錯:The certificate of ‘www.python.org’ is not trusted.
4.?執行torch.load(模型名稱, map_location='cpu')報錯:from torchvision.transforms.functional_tensor import rgb_to_grayscale
5.?pip安裝basicsr報錯:To fix this you could try to:
6.?cmake文件中D_GLIBCXX_USE_CXX11_ABI=0,導致無法到入第三方庫libjsoncpp.so
7.?鏈接libjsoncpp.a時報錯:which may bind externally can not be used when making a shared object; recompile with -fPIC
8.?vs code中git push代碼報錯:Missing or invalid credentials.
9.?git clone報錯:SSL certificate problem: self signed certificate in certificate chain
10.?openEuler系統中修改系統時間
最新評論
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使用方法(9418)
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(8963)
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](8626)
4.?編譯cmake報錯:Cannot find a C++ compiler that supports both C++11 and the specified C++ flags.(8207)
5.?把python3的版本從3.6升級到3.10(7236)
評論排行榜
1.?網游服務器通信架構的設計(3)
2.?公司散伙啦。杯具!反思!(3)
3.?Ubuntu9.10 VI下方向鍵變成ABCD的解決辦法(3)
4.?kosmix,又一個開源的類似GFS的分布式文件系統(2)
5.?DirectUI Lib XML編寫說明(2)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 小王
精品国产青草久久久久福利
|
要久久爱在线免费观看
|
国产精品久久久久久久人人看
|
伊人久久大香线蕉精品
|
日本免费久久久久久久网站
|
久久精品国产99国产精品
|
人人狠狠综合久久亚洲高清
|
模特私拍国产精品久久
|
久久婷婷国产剧情内射白浆
|
久久大香香蕉国产
|
亚洲狠狠综合久久
|
久久99精品久久久久久噜噜
|
午夜精品久久久内射近拍高清
|
日韩精品无码久久一区二区三
|
久久男人AV资源网站
|
国产A级毛片久久久精品毛片
|
久久99国产综合精品
|
久久精品亚洲男人的天堂
|
欧美精品丝袜久久久中文字幕
|
久久婷婷五月综合色99啪ak
|
国内精品久久久久久久久电影网
|
色综合久久久久无码专区
|
久久亚洲国产精品一区二区
|
亚洲国产一成久久精品国产成人综合
|
久久99精品国产麻豆蜜芽
|
国产成人精品综合久久久久
|
久久er国产精品免费观看2
|
亚洲精品97久久中文字幕无码
|
伊人伊成久久人综合网777
|
国产精品久久久久久一区二区三区
|
99久久国产主播综合精品
|
久久久久久久免费视频
|
97久久久精品综合88久久
|
久久夜色精品国产噜噜亚洲a
|
久久国产高清字幕中文
|
无码人妻精品一区二区三区久久
|
成人精品一区二区久久久
|
亚洲人成伊人成综合网久久久
|
久久夜色撩人精品国产小说
|
久久精品国产秦先生
|
国产综合久久久久久鬼色
|