設計模式 21 命令模式

2022-07-17 06:48:06 字數 2414 閱讀 8125

「行為變化」類模式

在元件的構建過程中,元件行為的變化經常導致組建本身劇烈的變化。「行為變化」類模式將元件的行為和元件本身進行解耦,從而支援元件行為的變化,實現兩者之間的松耦合。

命令模式(command)簡介:

將請求封裝成為乙個物件,從而使我們可以使用不同的請求對客戶端進行引數化,對請求進行排隊,記錄請求日誌,以及支援可撤銷的操作。

命令模式(command)結構:

//file: command.h

#pragma once

//command類,用了來宣告執行操作的介面。

class command

;//receiver類,確定乙個與請求相關的操作。可以是任何乙個類。

class receiver

;//invoker類,要求該命令執行這個請求。

class invoker

;

//file: comamnd.cpp

#include "pch.h"

#include "command.h"

#include using namespace std;

///command

command::command() {}

command::~command() {}

void command::execute() {}

///receiver

receiver::receiver() {}

receiver::~receiver() {}

void receiver::action()

///invoker

invoker::invoker(command* pcommand)

invoker::~invoker() {}

void invoker::executecommand()

concretecommand類,將乙個接收者物件繫結乙個動作,呼叫接收者相應的操作,執行execute。

//file: concretecommand.h

#pragma once

#include "command.h"

#include class concretecommand : public command

;

//file: concretecommand.cpp

#include "pch.h"

#include "concretecommand.h"

concretecommand::concretecommand(receiver* preceiver)

concretecommand::~concretecommand() {}

void concretecommand::execute()

客戶端**,建立乙個具體的命令物件並設定該命令的接收者:

// comamndpattern.cpp : this file contains the 'main' function. program execution begins and ends there.

#include "pch.h"

#include "command.h"

#include "concretecommand.h"

using namespace std;

int main()

執行結果:

command,receiver,invoker類:

//command類,用了來宣告執行操作的介面。

public abstract class command

public abstract void execute();

}//receiver類,確定乙個與請求相關的操作。可以是任何乙個類。

public class receiver

}//concretecommand類,將乙個接收者物件繫結乙個動作,呼叫接收者相應的操作,執行execute。

public class concretecommand : command

public override void execute() }

//invoker類,要求該命令執行這個請求。

public class invoke

public void executecomamnd()

}

客戶端**,建立乙個具體的命令物件並設定該命令的接收者:

class program

}

執行結果:

ref

書籍:設計模式與遊戲開發、大話設計模式

github:

設計模式21 策略模式

在策略模式 strategy pattern 中,乙個類的行為或其演算法可以在執行時更改。這種型別的設計模式屬於行為型模式。在策略模式中,我們建立表示各種策略的物件和乙個行為隨著策略物件改變而改變的 context 物件。策略物件改變 context 物件的執行演算法。如果乙個系統的策略多於四個,就...

21 設計模式 狀態模式

在狀態模式 state pattern 中,類的行為是基於它的狀態改變的。這種型別的設計模式屬於行為型模式。在狀態模式中,我們建立表示各種狀態的物件和乙個行為隨著狀態物件改變而改變的 context 物件。意圖 允許物件在內部狀態發生改變時改變它的行為,物件看起來好像修改了它的類。何時使用 中包含大...

設計模式 21 單例模式

宣告 vs2012中已經支援c 11了,因此下面的程式在vs2012中可以執行。如果版本比2012低,可能因為不支援 std mutex,std shared ptr而失敗。ifndef singleton h define singleton h include include using nam...