日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++设计模式-命令模式

發(fā)布時間:2025/3/15 c/c++ 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++设计模式-命令模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

?

?

基本概念

代碼與實例


?

基本概念

命令模式(Command),將一個請求封裝為對象,從而使你看用不同的請求對客戶端進(jìn)行參數(shù)化;對請求排隊或記錄請求日志,以及支持可撤銷操作。

命令模式的作用:

? ? ? ? ? 1. 能比較容易的設(shè)計一個命令隊列;

? ? ? ? ? 2. 在需要的情況下,可以比較容易地將命令記入日志;

? ? ? ? ? 3. 允許接收請求的一方?jīng)Q定是否要否決請求;

? ? ? ? ? 4. 可以容易的實現(xiàn)對請求的撤銷和重做;

? ? ? ? ? 5. 由于加進(jìn)的新的具體命令類不影響其他類,因此增加新的具體命令類很容易。

?

UML圖如下(此圖來源于大話設(shè)計模式)

?

代碼與實例

程序運行截圖如下:

源碼如下:

Head.h

#ifndef HEAD_H #define HEAD_H#include <iostream> #include <string> using namespace std;//Receiver類,知道如何實施與執(zhí)行一個與請求相關(guān)的操作,任何類都可能作文一個接收者 class Receiver{public:void action();~Receiver(); };//Command類,用來聲明執(zhí)行操作的接口 class Command{public:virtual void execute();Command(Receiver *receiver);virtual ~Command();protected:Command();Command(Command &c);Command &operator = (Command &c);Receiver *m_receiver; };//ConcreteCommand類,將一個接收者對象綁定于一個動作,調(diào)用接收這相應(yīng)的操作,以實現(xiàn)Execute class ConcreteCommand: public Command{public:ConcreteCommand(Receiver *receiver);void execute();~ConcreteCommand(); };//Invoker類,要求該命令執(zhí)行這個請求 class Invoker{public:void setCommand(Command *command);void executeCommand();private:Command *m_command; };#endif

Head.cpp

#include "Head.h"void Command::execute() {}Command::~Command() {cout << "Command::~Command()" << endl; }Command::Command() {}Command::Command(Command &c) {}Command::Command(Receiver *receiver) {m_receiver = receiver; }Command & Command::operator=(Command &c) {return Command(); }void Receiver::action() {cout << "執(zhí)行請求!" << endl; }Receiver::~Receiver() {cout << "Receiver::~Receiver()" << endl; }ConcreteCommand::ConcreteCommand(Receiver *receiver) : Command(receiver) {}void ConcreteCommand::execute() {m_receiver->action(); }ConcreteCommand::~ConcreteCommand() {cout << "ConcreteCommand::~ConcreteCommand()" << endl; }void Invoker::setCommand(Command *command) {m_command = command; }void Invoker::executeCommand() {m_command->execute(); }

main.cpp

#include "Head.h"int main(int *argc, int *argv){Receiver *r = new Receiver;Command *c = new ConcreteCommand(r);Invoker *i = new Invoker;i->setCommand(c);i->executeCommand();delete r;delete c;delete i;getchar();return 0; }

?

總結(jié)

以上是生活随笔為你收集整理的C++设计模式-命令模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。