c 設計模式之命令模式

2022-08-30 21:09:19 字數 2923 閱讀 3520

命令模式:

場景:對乙個物件要進行很多動作,每個動作就是乙個命令。在原有的邏輯中,需要在客戶端寫出許多分支語句,針對內個動作,呼叫該物件類的成員函式。每增加乙個動作,都需要在客戶端和物件類中修改**。違背了高內聚,低耦合的原則。因此,對於這種情況就可以使用命令模式。

組成元素:

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 從上面的 控制中心 中可以看出,它是直接使用的部件,如果這時候要新增 修改或者刪除部件的攻擊方式,那麼 控制中心 也要跟...