《設計模式》之命令模式

定義:

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

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

// 命令接口
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í)行者,這里可以設置一個線程池來調(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)

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

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

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

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

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