《設(shè)計(jì)模式》之命令模式

定義:

命令模式:將請(qǐng)求封裝成對(duì)象,這可以讓你使用不同的請(qǐng)求、隊(duì)列,或者日志請(qǐng)求來(lái)參數(shù)化其他對(duì)象。命令模式也可以支持撤銷操作。

命令模式在Java的框架中使用非常頻繁,比如最近我研究的一個(gè)Java的架構(gòu)基礎(chǔ)框架COLA,里面就使用了命令模式來(lái)處理業(yè)務(wù)請(qǐng)求;
代碼:

// 命令接口
interface ICommand {
    execute(): void
}

// 增加用戶命令
class AddUserCommand implements ICommand {
    constructor(public name: string) {
        this.name = name
    }
    public execute() {
        console.log('add user:' + this.name)
    }
}

// 刪除用戶命令
class DeleteUserCommand implements ICommand {
    constructor(public id: number) { 
        this.id = id
    }
    public execute() {
        console.log('delete user by id:' + this.id)
    }
}

// 命令執(zhí)行者,這里可以設(shè)置一個(gè)線程池來(lái)調(diào)度
class CommandHub {
    public send(cmd: ICommand) {
        cmd.execute()
    }
}

const commandHub = new CommandHub()

// 發(fā)送添加用戶命令
const addUserCommand = new AddUserCommand('mimi')
commandHub.send(addUserCommand)

// 發(fā)送刪除用戶命令
const deleteUserCommand = new DeleteUserCommand(99)
commandHub.send(deleteUserCommand)

如果需要實(shí)現(xiàn)撤銷命令,實(shí)現(xiàn)如下

// 命令接口
interface ICommand {
    execute(): void
    // 撤銷方法
    undo(): void
}

在實(shí)現(xiàn)類里,加入撤銷該操作的邏輯,然后每個(gè)命令都發(fā)到一個(gè)隊(duì)列里,CommandHub不斷從隊(duì)列里取出命令執(zhí)行execute方法,執(zhí)行完了再放到歷史命令隊(duì)列里,當(dāng)撤銷操作的時(shí)候,從歷史命令隊(duì)列里取出命令,執(zhí)行redo方法;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容