国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【軟件設(shè)計模式之命令模式】

這篇具有很好參考價值的文章主要介紹了【軟件設(shè)計模式之命令模式】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、命令模式簡介

命令模式是一種行為設(shè)計模式,它在軟件開發(fā)中扮演著特殊的角色,尤其是在處理操作請求、排隊請求、記錄日志,以及支持可撤銷操作方面。

1. 定義

命令模式將請求封裝成對象,從而允許使用者與接收者解耦,使用不同的請求、隊列或日志來參數(shù)化其他對象。它也支持可撤銷操作。簡單來說,命令模式把一個請求或簡單操作封裝到一個對象中。

在命令模式中,這個封裝包含了所有必要的信息,這可能包括調(diào)用方法的名稱、擁有該方法的對象、方法參數(shù)的值等。

2. 核心概念

a. 命令(Command)

命令對象為所有命令聲明一個接口。在最簡單的形式中,這個接口包含了一個執(zhí)行操作的方法。命令對象知道接收者是誰以及執(zhí)行哪些操作。

b. 接收者(Receiver)

接收者是命令操作的對象。它知道如何執(zhí)行與請求相關(guān)的操作。任何類都可以作為接收者。

c. 調(diào)用者(Invoker)

調(diào)用者持有一個命令對象,并在某一時間點調(diào)用命令對象的執(zhí)行方法,以發(fā)送請求。調(diào)用者不需要知道請求是如何執(zhí)行的,也不知道操作的具體細節(jié)。

d. 客戶端(Client)

客戶端負責(zé)創(chuàng)建一個具體的命令,并設(shè)置其接收者??蛻舳丝梢詻Q定哪些命令執(zhí)行何時執(zhí)行。

二、命令模式的實際應(yīng)用

1. 命令模式的優(yōu)點

a. 解耦發(fā)起者和執(zhí)行者

命令模式最顯著的好處是將發(fā)起請求的對象(調(diào)用者)與執(zhí)行請求的對象(接收者)解耦。這種分離使得調(diào)用者不需要知道請求的具體實現(xiàn)細節(jié)。

b. 易于擴展

命令模式允許輕松地添加新命令,因為新增命令只需實現(xiàn)一個接口。這有助于遵循開閉原則,即軟件實體應(yīng)該對擴展開放,對修改關(guān)閉。

c. 組合命令

可以組合多個命令,實現(xiàn)復(fù)雜的功能。例如,可以實現(xiàn)宏命令,這是一種復(fù)合命令,它包含多個子命令。

d. 支持撤銷操作

由于每個操作都被封裝在命令對象中,可以很方便地實現(xiàn)撤銷(undo)和重做(redo)功能。

e. 可以實現(xiàn)請求的排隊和日志記錄

命令可以排隊執(zhí)行,也可以記錄日志,有助于實現(xiàn)事務(wù)功能,如對失敗的操作進行回滾。

2. 命令模式的缺點

a. 可能導(dǎo)致類數(shù)量增多

每個新命令可能都需要創(chuàng)建一個新類,隨著應(yīng)用程序中命令數(shù)量的增加,會增加系統(tǒng)的復(fù)雜性。

b. 增加代碼量和復(fù)雜性

對于一些簡單的操作,使用命令模式可能會讓代碼變得不必要地復(fù)雜,增加代碼量。

3. 適用場景

a. 需要參數(shù)化和延遲執(zhí)行操作時

當(dāng)需要將操作封裝成對象,以便將其傳遞、存儲或操作時,命令模式非常適用。

b. 支持撤銷和重做操作

在需要提供撤銷和重做功能的場景中,如文本編輯器或IDE中的操作,命令模式非常有用。

c. 需要實現(xiàn)操作的日志記錄和恢復(fù)功能

在需要記錄操作歷史以便后續(xù)恢復(fù)或重放操作的系統(tǒng)中,命令模式是一個理想的選擇。

d. 需要處理事務(wù)

在需要創(chuàng)建復(fù)雜的事務(wù)系統(tǒng),如需要維護操作順序和狀態(tài)的數(shù)據(jù)庫管理系統(tǒng)中,命令模式可以幫助實現(xiàn)事務(wù)的回滾機制。

三、命令模式的實現(xiàn)

命令模式的實現(xiàn)涉及到定義命令接口、創(chuàng)建具體命令類、定義接收者和調(diào)用者。

1. 代碼示例

一個簡單的文本編輯器應(yīng)用,實現(xiàn)一個文本添加和撤銷的功能。

#include <iostream>
#include <string>
#include <vector>
#include <memory>

// 命令接口
class Command {
public:
    virtual ~Command() {}
    virtual void Execute() = 0;
    virtual void Undo() = 0;
};

// 接收者類
class TextEditor {
    std::string text;
public:
    void addText(const std::string& newText) {
        text += newText;
    }
    void removeText(size_t length) {
        text.erase(text.size() - length);
    }
    void showText() {
        std::cout << text << std::endl;
    }
};

// 具體命令類
class AddTextCommand : public Command {
    TextEditor& editor;
    std::string textToAdd;
public:
    AddTextCommand(TextEditor& editor, const std::string& text) : editor(editor), textToAdd(text) {}
    void Execute() override {
        editor.addText(textToAdd);
    }
    void Undo() override {
        editor.removeText(textToAdd.length());
    }
};

// 調(diào)用者類
class CommandInvoker {
    std::vector<std::shared_ptr<Command>> history;
public:
    void executeCommand(std::shared_ptr<Command> command) {
        command->Execute();
        history.push_back(command);
    }
    void undo() {
        if (!history.empty()) {
            history.back()->Undo();
            history.pop_back();
        }
    }
};

int main() {
    TextEditor editor;
    CommandInvoker invoker;

    invoker.executeCommand(std::make_shared<AddTextCommand>(editor, "Hello"));
    invoker.executeCommand(std::make_shared<AddTextCommand>(editor, " World"));

    editor.showText(); // 輸出: Hello World

    invoker.undo();
    editor.showText(); // 輸出: Hello

    invoker.undo();
    editor.showText(); // 輸出: (空)

    return 0;
}

2. 實現(xiàn)步驟

a. 定義命令接口

首先,創(chuàng)建一個命令接口(Command),定義執(zhí)行和撤銷命令的方法。

b. 創(chuàng)建具體命令類

然后,為每個具體的動作實現(xiàn)一個命令類(如AddTextCommand),這些類繼承自命令接口并實現(xiàn)相應(yīng)的方法。

c. 定義接收者

接收者是命令執(zhí)行的對象(如TextEditor),它知道如何實際執(zhí)行命令。

d. 實現(xiàn)調(diào)用者

調(diào)用者(如CommandInvoker)負責(zé)調(diào)用命令的執(zhí)行方法,并可以存儲歷史記錄,用于實現(xiàn)撤銷功能。

3. 案例分析

通過AddTextCommand,用戶可以向文本編輯器中添加文本。編輯器的狀態(tài)可以通過調(diào)用命令的Undo方法來回退。在更復(fù)雜的應(yīng)用中,可以擴展這種模式來實現(xiàn)更多復(fù)雜的命令和功能,如復(fù)制、粘貼、刪除等。

四、命令模式與其他設(shè)計模式的比較

1. 命令模式與策略模式

a. 相似點

  • 封裝行為:兩者都涉及到將行為封裝在對象中。
  • 可交換性:在這兩種模式中,可以動態(tài)地改變對象所封裝的行為。

b. 不同點

  • 目的和用途

    • 命令模式:重點在于分離發(fā)起命令的對象(調(diào)用者)和接收命令的對象(接收者)。它允許將命令封裝為對象以進行存儲、傳遞和執(zhí)行。
    • 策略模式:側(cè)重于使算法的變體可以互換使用。它允許根據(jù)上下文更改對象的行為,而不是通過封裝命令和請求。
  • 實現(xiàn)方式

    • 命令模式中,調(diào)用者通常不知道命令具體實施的操作,只是知道如何發(fā)出命令。
    • 策略模式中,上下文類知道哪個策略正在使用,并直接使用它來完成其任務(wù)。

2. 命令模式與觀察者模式

a. 相似點

  • 解耦:兩者都有助于解耦對象,使得發(fā)起動作的對象不必關(guān)心接收動作的對象。

b. 不同點

  • 通信機制

    • 命令模式:強調(diào)在對象之間傳遞封裝有操作細節(jié)的命令對象。命令模式更多地關(guān)注于操作和它的發(fā)送者和接收者。
    • 觀察者模式:定義了對象之間的一對多依賴關(guān)系,當(dāng)一個對象狀態(tài)改變時,所有依賴于它的對象都會得到通知并自動更新。觀察者模式更多地用于事件處理和通知機制。
  • 使用場景文章來源地址http://www.zghlxwxcb.cn/news/detail-827710.html

    • 使用命令模式,當(dāng)需要將請求或簡單操作封裝到對象中,以參數(shù)化其他對象,實現(xiàn)撤銷操作或者將請求放入隊列中處理時。
    • 使用觀察者模式,當(dāng)一個狀態(tài)的改變需要自動通知一個或多個對象,并且對象間的這種交互是松散耦合的時。

到了這里,關(guān)于【軟件設(shè)計模式之命令模式】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 軟件設(shè)計模式與體系結(jié)構(gòu)-設(shè)計模式-行為型軟件設(shè)計模式-中介者模式

    軟件設(shè)計模式與體系結(jié)構(gòu)-設(shè)計模式-行為型軟件設(shè)計模式-中介者模式

    模式動機: 為了減少對象兩之間復(fù)雜的引用關(guān)系,使之成為一個松耦合的系統(tǒng),需要適用中介者模式 定義: 用一個中介對象來封裝一系列的對象交互,中介者使各對象不需要顯式地相互引用,從而使耦合松散,而且可以獨立地該變它們之間的交互 中介者模式又稱為調(diào)停者模

    2024年02月12日
    瀏覽(26)
  • 設(shè)計模式行為模式-命令模式

    設(shè)計模式行為模式-命令模式

    命令模式(Command Pattern)是一種行為型設(shè)計模式,用于將請求封裝為對象,從而使你可以使用不同的請求、隊列或者日志請求來參數(shù)化其他對象。這樣可以實現(xiàn)請求的參數(shù)化操作、隊列化和日志化,且能夠支持撤銷操作。 命令模式由以下幾個核心組件組成: 命令(Command)

    2024年02月10日
    瀏覽(29)
  • 軟件設(shè)計模式之原型模式

    軟件設(shè)計模式之原型模式

    原型模式(Prototype Pattern)的簡單程度僅次于單例模式和迭代器模式。正是由于簡單,使用的場景才非常地多,其定義如下: Specify the kinds of objects to create using a prototypical instance, and create new objects by copyingthis prototype.(用原型實例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新

    2024年02月09日
    瀏覽(21)
  • 設(shè)計模式之命令模式

    設(shè)計模式之命令模式

    定義: 命令模式(Command Pattern)是一種數(shù)據(jù)驅(qū)動的設(shè)計模式,它屬于行為型模式。請求以命令的形式包裹在對象中,并傳給調(diào)用對象。調(diào)用對象尋找可以處理該命令的合適的對象,并把該命令傳給相應(yīng)的對象,該對象執(zhí)行命令。 目的: 將一個請求封裝成一個對象,從而使您

    2024年02月20日
    瀏覽(13)
  • 設(shè)計模式:命令模式

    命令模式(Command Pattern)是一種行為設(shè)計模式,它將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數(shù)化;對請求排隊或記錄請求日志,以及支持可撤銷的操作。 定義 命令模式包括以下主要角色: Command :命令接口,聲明執(zhí)行操作的方法。 ConcreteCommand :具

    2024年04月16日
    瀏覽(24)
  • 設(shè)計模式——命令模式

    設(shè)計模式——命令模式

    將一個請求封裝成一個對象,從而讓你使用不同的請求吧客戶端參數(shù)化,對請求排隊或者記錄請求日志,可以提供命令的撤銷和恢復(fù)功能。 命令模式是一個高內(nèi)聚的模式。 優(yōu)點 類間解耦。調(diào)用者與接收者之間沒有任何依賴關(guān)系。調(diào)用者只需要調(diào)用execute()方法即可,不需要了

    2024年02月15日
    瀏覽(17)
  • 【設(shè)計模式】命令模式

    【設(shè)計模式】命令模式

    【設(shè)計模式】命令模式——行為型模式 定義: 將一個請求封裝為一個對象,使發(fā)出請求的責(zé)任和執(zhí)行請求的責(zé)任分割開。這樣兩者之間通過命令對象進行溝通,這樣方便將命令對象進行存儲、傳遞、調(diào)用、增加與管理。 命令模式包含以下主要角色: 抽象命令類(Command)角

    2024年02月03日
    瀏覽(18)
  • 設(shè)計模式(19)命令模式

    設(shè)計模式(19)命令模式

    一、介紹: 1、定義:命令模式(Command Pattern)是一種行為設(shè)計模式,它將請求封裝為一個對象,從而使你可以使用不同的請求對客戶端進行參數(shù)化。命令模式還支持請求的排隊、記錄日志、撤銷操作等功能。 2、組成結(jié)構(gòu): (1)命令接口(Command):定義執(zhí)行命令的方法,可

    2024年02月07日
    瀏覽(14)
  • 設(shè)計模式-命令模式

    接受者(Receiver) 請求的實際作用對象 抽象命令(Command) 聲明了執(zhí)行請求的execute方法 具體命令(ConcreteCommand) 調(diào)用實際操作對象,實現(xiàn)execute 調(diào)用者(Invoker) 調(diào)用命令請求發(fā)送者 功能鍵綁定 比如遙控器的功能鍵,現(xiàn)在想要實現(xiàn)為功能可以自定義綁定事件,請使用命令模

    2024年02月09日
    瀏覽(12)
  • 軟件設(shè)計原則與設(shè)計模式

    軟件設(shè)計原則與設(shè)計模式

    設(shè)計中各各原則同時兼有或沖突,不存在包含所有原則的設(shè)計 一:單一職責(zé)原則又稱單一功能原則 核心:解耦和增強內(nèi)聚性(高內(nèi)聚,低耦合) 描述:類被修改的幾率很大,因此應(yīng)該專注于單一的功能。如果你把多個功能放在同一個類中,功能之間就形成了關(guān)聯(lián)。 二:開閉

    2024年02月10日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包