命令模式:
場景:對乙個物件要進行很多動作,每個動作就是乙個命令。在原有的邏輯中,需要在客戶端寫出許多分支語句,針對內個動作,呼叫該物件類的成員函式。每增加乙個動作,都需要在客戶端和物件類中修改**。違背了高內聚,低耦合的原則。因此,對於這種情況就可以使用命令模式。
組成元素:
1.抽象命令類
2.具體命令類(動作)
3.接受者(接受動作的物件)
4.裝配者,增加刪除命令,從而形成命令鏈
結構: 1.抽象命令類:很多動作,那麼都需要有很多命令類,為了**層次性更好,最好抽象出乙個抽象的命令類。該類應該有乙個執行函式,子類繼承該函式(excute函式),在該成員函式中,呼叫接受者的成員函式,因此在抽象命令類中應該有乙個接受者成員變數
2.具體命令類:繼承具體抽象類,執行具體的動作
3.接受者:針對具體的命令編寫具體的執行成員函式
4.裝配者:增加或者刪除命令物件,形成命令鏈
1執行結果:2#pragma once
3 #include 4
using
namespace
std;
5class
picture6;
1415
16 #include "
pch.h
"17 #include "
paint.h"18
1920
picture::picture()
2123
2425 picture::~picture()
2628
29void
picture::rotate()
3033
34void
picture::translation()
3538
39void
picture::stretch()
4043
44//
icommand.h
45#pragma once
46 #include 47 #include "
paint.h"48
using
namespace
std;
4950
class
icommand51;
6061
62class cmdrotate:public
icommand63;
6869
class cmdtranslation:public
icommand70;
7576
class cmdstretch:public
icommand77;
8283
84 #include "
pch.h
"85 #include "
icommand.h"86
8788 icommand::icommand(picture*picture)
8991
9293 icommand::~icommand()
9496
97 cmdrotate::cmdrotate(picture*picture) :icommand(picture) {}
9899
void
cmdrotate::excute()
100103
104 cmdtranslation::cmdtranslation(picture*picture) :icommand(picture) {}
105106
void
cmdtranslation::excute()
107110
111112 cmdstretch::cmdstretch(picture*picture) :icommand(picture) {}
113114
void
cmdstretch::excute()
115118
119//
invoker.h
120#pragma once
121 #include 122 #include "
icommand.h
"123
class
invoker
124;
134135
136 #include "
pch.h
"137 #include "
invoker.h
"138
139140
invoker::invoker()
141143
144145 invoker::~invoker()
146148
149void invoker::addcmd(icommand*cmd)
150153
154void invoker::removecmd(icommand*cmd)
155158
159void
invoker::notify()
160166
}167
168//
main.cpp
169 #include "
pch.h
"170 #include 171 #include "
icommand.h
"172 #include "
paint.h
"173 #include "
invoker.h
"174
using
namespace
std;
175176
177#define safe_delete(p) }
178179
intmain()
180
設計模式之命令模式 c
命令模式的作用是將函式轉換為物件,將實際的操作與並行的框架分離,命令模式屬於行為級 類圖如下 於c 程式設計思想 class task class taskrunner taskrunner operator taskrunner taskrunner const taskrunner static...
C 設計模式之命令模式
命令模式 講乙個請求封裝為乙個物件,從而讓我們可用不同的請求對客戶進行引數化 對請求排隊或者記錄請求日誌,命令模式是一種行為性模式。命令模式可以將請求傳送者和接受者完全解耦,傳送者和接收者之間沒有直接引用關係。協議處理類 class handleclientprotocol void adddiam...
C 設計模式之命令
1 2 控制中心 3 4public class centercontroller511 12 13 部件 14 15public class compontecase 1621 從上面的 控制中心 中可以看出,它是直接使用的部件,如果這時候要新增 修改或者刪除部件的攻擊方式,那麼 控制中心 也要跟...