中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

互動(dòng)網(wǎng)站案例培訓(xùn)教育機(jī)構(gòu)

互動(dòng)網(wǎng)站案例,培訓(xùn)教育機(jī)構(gòu),360建筑網(wǎng)質(zhì)量怎么樣,網(wǎng)站賺流量命令模式 (Command) 命令模式 是一種行為型設(shè)計(jì)模式,它將請(qǐng)求封裝為一個(gè)對(duì)象,從而使得可以用不同的請(qǐng)求對(duì)客戶端進(jìn)行參數(shù)化、對(duì)請(qǐng)求排隊(duì)或記錄日志,以及支持可撤銷的操作。 意圖 將操作的調(diào)用者與接收者分離,通過將請(qǐng)求封裝為獨(dú)…

命令模式 (Command)

命令模式 是一種行為型設(shè)計(jì)模式,它將請(qǐng)求封裝為一個(gè)對(duì)象,從而使得可以用不同的請(qǐng)求對(duì)客戶端進(jìn)行參數(shù)化、對(duì)請(qǐng)求排隊(duì)或記錄日志,以及支持可撤銷的操作。


意圖
  • 將操作的調(diào)用者與接收者分離,通過將請(qǐng)求封裝為獨(dú)立對(duì)象,使得請(qǐng)求更加靈活。
  • 支持撤銷、重做、記錄日志等操作。

使用場(chǎng)景
  1. 需要參數(shù)化請(qǐng)求
    • 客戶端不直接調(diào)用操作,而是通過封裝的命令對(duì)象。
  2. 需要支持撤銷 (Undo) 或重做 (Redo)
    • 操作需要記錄歷史,以支持回滾或重試。
  3. 請(qǐng)求需要隊(duì)列化
    • 系統(tǒng)需要對(duì)請(qǐng)求排隊(duì)處理或記錄日志。

參與者角色
  1. 命令接口 (Command)
    • 定義所有命令的公共接口。
  2. 具體命令類 (ConcreteCommand)
    • 實(shí)現(xiàn)命令接口,調(diào)用接收者執(zhí)行具體操作。
  3. 接收者 (Receiver)
    • 負(fù)責(zé)執(zhí)行具體操作的對(duì)象。
  4. 調(diào)用者 (Invoker)
    • 負(fù)責(zé)調(diào)用命令。
  5. 客戶端 (Client)
    • 創(chuàng)建命令對(duì)象,并將其傳遞給調(diào)用者。

示例代碼

以下代碼展示了命令模式的實(shí)現(xiàn),模擬智能家居系統(tǒng)控制燈光的打開、關(guān)閉操作,并支持撤銷功能。

#include <iostream>
#include <memory>
#include <stack>
#include <string>// 命令接口:定義命令的公共接口
class Command {
public:virtual ~Command() = default;// 執(zhí)行命令virtual void execute() = 0;// 撤銷命令virtual void undo() = 0;
};// 接收者:燈
class Light {
private:std::string name; // 燈的名稱public:explicit Light(std::string name) : name(std::move(name)) {}void turnOn() {std::cout << name << " 燈已打開。
";}void turnOff() {std::cout << name << " 燈已關(guān)閉。
";}
};// 具體命令類:打開燈的命令
class LightOnCommand : public Command {
private:Light& light; // 具體接收者:燈public:explicit LightOnCommand(Light& light) : light(light) {}void execute() override {light.turnOn(); // 打開燈}void undo() override {light.turnOff(); // 撤銷,關(guān)閉燈}
};// 具體命令類:關(guān)閉燈的命令
class LightOffCommand : public Command {
private:Light& light; // 具體接收者:燈public:explicit LightOffCommand(Light& light) : light(light) {}void execute() override {light.turnOff(); // 關(guān)閉燈}void undo() override {light.turnOn(); // 撤銷,打開燈}
};// 調(diào)用者:遙控器
class RemoteControl {
private:std::stack<std::unique_ptr<Command>> commandHistory; // 存儲(chǔ)命令歷史public:void executeCommand(std::unique_ptr<Command> command) {command->execute(); // 執(zhí)行命令commandHistory.push(std::move(command)); // 將命令存入歷史}void undoLastCommand() {if (!commandHistory.empty()) {auto& lastCommand = commandHistory.top(); // 獲取最近的命令lastCommand->undo(); // 撤銷命令commandHistory.pop(); // 移除該命令} else {std::cout << "無可撤銷的命令。
";}}
};// 客戶端代碼
int main() {Light livingRoomLight("客廳");Light bedroomLight("臥室");RemoteControl remoteControl;// 打開客廳燈remoteControl.executeCommand(std::make_unique<LightOnCommand>(livingRoomLight));// 關(guān)閉客廳燈remoteControl.executeCommand(std::make_unique<LightOffCommand>(livingRoomLight));// 打開臥室燈remoteControl.executeCommand(std::make_unique<LightOnCommand>(bedroomLight));// 撤銷最近一次操作remoteControl.undoLastCommand();// 撤銷最近一次操作remoteControl.undoLastCommand();return 0;
}

代碼解析
1. 命令接口 (Command)
  • 定義了命令的公共接口,所有具體命令都需要實(shí)現(xiàn) executeundo 方法。
class Command {
public:virtual ~Command() = default;virtual void execute() = 0;virtual void undo() = 0;
};
2. 接收者 (Light)
  • 實(shí)現(xiàn)燈的具體操作,包括 turnOn(打開燈)和 turnOff(關(guān)閉燈)。
  • 是命令的實(shí)際執(zhí)行者。
class Light {
private:std::string name;
public:explicit Light(std::string name) : name(std::move(name)) {}void turnOn() { std::cout << name << " 燈已打開。
"; }void turnOff() { std::cout << name << " 燈已關(guān)閉。
"; }
};
3. 具體命令類
  • LightOnCommand
    • execute 方法中調(diào)用 turnOn 打開燈,在 undo 方法中調(diào)用 turnOff 撤銷。
  • LightOffCommand
    • execute 方法中調(diào)用 turnOff 關(guān)閉燈,在 undo 方法中調(diào)用 turnOn 撤銷。
class LightOnCommand : public Command {
private:Light& light;
public:explicit LightOnCommand(Light& light) : light(light) {}void execute() override { light.turnOn(); }void undo() override { light.turnOff(); }
};
4. 調(diào)用者 (RemoteControl)
  • RemoteControl 負(fù)責(zé)調(diào)用命令對(duì)象的 execute 方法。
  • 使用棧 (std::stack) 存儲(chǔ)命令歷史,以支持撤銷。
class RemoteControl {
private:std::stack<std::unique_ptr<Command>> commandHistory;
public:void executeCommand(std::unique_ptr<Command> command) {command->execute();commandHistory.push(std::move(command));}void undoLastCommand() {if (!commandHistory.empty()) {commandHistory.top()->undo();commandHistory.pop();} else {std::cout << "無可撤銷的命令。
";}}
};
5. 客戶端
  • 客戶端創(chuàng)建具體命令對(duì)象,并通過調(diào)用者 RemoteControl 執(zhí)行命令。
  • 通過 undoLastCommand 撤銷命令。

優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
  1. 解耦調(diào)用者與接收者
    • 調(diào)用者無需知道接收者的具體實(shí)現(xiàn)。
  2. 支持撤銷和重做
    • 通過記錄命令歷史,支持操作的撤銷和重做。
  3. 命令隊(duì)列化
    • 可以輕松實(shí)現(xiàn)請(qǐng)求的排隊(duì)處理。
缺點(diǎn)
  1. 類數(shù)量增加
    • 每個(gè)操作都需要定義一個(gè)具體命令類。
  2. 存儲(chǔ)開銷
    • 需要存儲(chǔ)命令歷史以支持撤銷和重做。

適用場(chǎng)景
  1. 參數(shù)化請(qǐng)求
    • 將請(qǐng)求封裝為獨(dú)立對(duì)象,客戶端無需直接調(diào)用。
  2. 操作的撤銷和重做
    • 系統(tǒng)需要支持操作回滾。
  3. 請(qǐng)求隊(duì)列化
    • 系統(tǒng)需要對(duì)請(qǐng)求進(jìn)行排隊(duì)或記錄日志。

總結(jié)

命令模式通過將請(qǐng)求封裝為對(duì)象,實(shí)現(xiàn)了請(qǐng)求的參數(shù)化、撤銷、排隊(duì)處理等功能,是一種優(yōu)雅的行為模式。適用于需要解耦調(diào)用者和接收者的場(chǎng)景,尤其在支持撤銷或重做的系統(tǒng)中表現(xiàn)出色。

http://www.risenshineclean.com/news/3072.html

相關(guān)文章:

  • 熊貓辦公ppt模板下載seo外包公司報(bào)價(jià)
  • 個(gè)體工商戶怎么做網(wǎng)站搜索引擎優(yōu)化英文簡(jiǎn)稱
  • html網(wǎng)站開發(fā)論文新人跑業(yè)務(wù)怎么找客戶
  • 網(wǎng)站功能結(jié)構(gòu)圖 怎么做鄭州網(wǎng)絡(luò)營(yíng)銷顧問
  • 餐飲管理培訓(xùn)課程成都百度seo推廣
  • 企業(yè)門戶網(wǎng)站設(shè)計(jì)方案如何推廣自己產(chǎn)品
  • 如何使用模板網(wǎng)站建設(shè)網(wǎng)頁(yè)seo系統(tǒng)是什么
  • 網(wǎng)站做的好的公司名稱泉州百度關(guān)鍵詞優(yōu)化
  • 網(wǎng)站開發(fā)公司經(jīng)營(yíng)范圍手機(jī)百度賬號(hào)申請(qǐng)注冊(cè)
  • 企業(yè)做網(wǎng)站平臺(tái)的好處鶴壁seo推廣
  • 許昌知名網(wǎng)站建設(shè)價(jià)格重慶發(fā)布的最新消息今天
  • 宣傳網(wǎng)站建設(shè)意義查看百度關(guān)鍵詞價(jià)格
  • 阿圖什網(wǎng)站寧波核心關(guān)鍵詞seo收費(fèi)
  • 網(wǎng)站 展示百度搜索風(fēng)云榜總榜
  • 北京澳環(huán)網(wǎng)站拼多多關(guān)鍵詞怎么優(yōu)化
  • 甜品網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)網(wǎng)站首頁(yè)不收錄
  • 做英文行程的網(wǎng)站汕頭自動(dòng)seo
  • 濟(jì)南企業(yè)做網(wǎng)站網(wǎng)絡(luò)營(yíng)銷策劃案例
  • 寧波網(wǎng)站建設(shè)方案報(bào)價(jià)四川seo平臺(tái)
  • 不花錢自己可以做網(wǎng)站嗎專門搜索知乎內(nèi)容的搜索引擎
  • 宣傳冊(cè)內(nèi)容排版揚(yáng)州seo
  • 怎樣php網(wǎng)站建設(shè)河南網(wǎng)站建設(shè)公司哪家好
  • 北京智能網(wǎng)站建設(shè)系統(tǒng)加盟怎么用網(wǎng)絡(luò)推廣業(yè)務(wù)
  • 在做網(wǎng)站編代碼網(wǎng)頁(yè)導(dǎo)航條中的文字出現(xiàn)在導(dǎo)航條的下方怎莫解決東莞有限公司seo
  • 網(wǎng)站建設(shè)的一般步驟精準(zhǔn)粉絲引流推廣
  • 成都哪里做網(wǎng)站便宜百度的合作網(wǎng)站有哪些
  • 網(wǎng)站建設(shè)實(shí)訓(xùn)內(nèi)容廣東東莞疫情最新消息今天又封了
  • 什么情況下需要建設(shè)網(wǎng)站蘋果自研搜索引擎或?yàn)樘娲雀?/a>
  • 成都網(wǎng)站建設(shè)博客國(guó)際新聞最新消息十條摘抄
  • 時(shí)光軸網(wǎng)站模板關(guān)鍵詞在線聽