我学会了,命令模式

简介: 命令模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。

前言

命令模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。

命令模式

使用场景:将命令进行存储,在需要的时候再去调用。比如请求的封装,需要的时候再去调用这个命令。这种模式是为了将行为的执行延迟了,将 执行类的对象封装到命令类中,执行类对象的行为就会作为命令类的一个行为,当需要调用时,再将命令传给调用类的对象,调用类的对象直接调用该命令类的对象的这个行为即可。

理解:这是一种类、对象之间的经典交互方式,将类、对象的行为和使用解耦了。这个模式其实非常的简单,也就是将要执行的行为封装为一个命令,这个命令可以传给调用者,调用者可以选择在合适的时候去调用。之所以看起来那么复杂,其实是那层概念难以理解,比如 将执行者和调用者解耦。执行者和调用者的含义相似,但是可以将执行者定义为厨师,而调用者可以定义为顾客,而命令可以理解为做麻辣小龙虾。顾客不是直接找厨师做麻小,而是通过菜单点菜,厨师看到菜单就会去做,做好了顾客直接吃就行了。

namespace action_mode_09 {
    
    // 炒菜命令的接口
    interface IStirFryCommand {

        stirFry (): string
    }

    // 执行类:五星厨师
    class FiveStarChef {

        // 做一份麻辣小龙虾
        stirFrySpicyCrayfish () {
            const reuslt = '一盘麻辣小龙虾!!!!!'
            console.log('五星厨师在线做菜,来喽一盘' + reuslt)
            return reuslt
        }

        // 做一份红烧东坡肉
        stirFryBraisedDongpoMeat () {
            const reuslt = '一盘红烧东坡肉!!!!!'
            console.log('五星厨师在线做菜,来喽一盘' + reuslt)
            return reuslt
        }
    }

    // 命令类:做一份麻辣小龙虾
    class SpicyCrayfish implements IStirFryCommand {

        fiveStarChef: FiveStarChef

        constructor (fiveStarChef: FiveStarChef) {
            this.fiveStarChef = fiveStarChef
            console.log('命令:做一份麻辣小龙虾')
        }

        stirFry(): string {
            console.log('执行命令:做一份麻辣小龙虾')
            return this.fiveStarChef.stirFrySpicyCrayfish()
        }
    }

    // 命令类:做一份红烧东坡肉
    class BraisedDongpoMeat implements IStirFryCommand {
        
        fiveStarChef: FiveStarChef

        constructor (fiveStarChef: FiveStarChef) {
            this.fiveStarChef = fiveStarChef
            console.log('命令:做一份红烧东坡肉')
        }

        stirFry(): string {
            console.log('执行命令:做一份红烧东坡肉')
            return this.fiveStarChef.stirFryBraisedDongpoMeat()
        }
    }

    // 调用类:VIP客户
    class VIPCustomes {

        private mealList: Array<IStirFryCommand> = new Array()

        // 点菜
        addOrder(orderCmd: IStirFryCommand) {
            this.mealList.push(orderCmd)
        }

        // 吃菜
        eat () {
            
            if (!this.mealList.length) {
                return
            }

            while(this.mealList.length) {
                const meal = this.mealList.splice(0, 1)[0]
                const result = meal.stirFry()
                console.log('吃:' + result)
            }

            console.log('都吃完了!!!!!')
        }
    }
  

    const fiveStarChef = new FiveStarChef()
    const spicyCrayfish = new SpicyCrayfish(fiveStarChef)
    const braisedDongpoMeat = new BraisedDongpoMeat(fiveStarChef)

    const vipCustomes = new VIPCustomes()
    // 没点菜,直接吃
    vipCustomes.eat()

    // 点两单
    vipCustomes.addOrder(spicyCrayfish)
    vipCustomes.addOrder(braisedDongpoMeat)
    // 吃
    vipCustomes.eat()

    // 点两单
    vipCustomes.addOrder(braisedDongpoMeat)
    vipCustomes.addOrder(spicyCrayfish)
    // 吃
    vipCustomes.eat()

}
目录
相关文章
|
3月前
|
存储 设计模式 调度
行为型 命令模式
行为型 命令模式
34 1
|
2月前
|
设计模式
命令模式-大话设计模式
命令模式-大话设计模式
14 2
|
2月前
|
设计模式 Java
Java设计模式之命令模式详解
Java设计模式之命令模式详解
|
12月前
|
设计模式 Java
|
8月前
|
存储
命令模式
命令模式
36 0
|
设计模式
命令模式解读
命令模式解读
|
存储 前端开发
关于命令模式我所知道的
关于命令模式我所知道的
85 0
|
存储 Java 程序员
行为型模式-命令模式
行为型模式-命令模式
102 0
|
Java 程序员 uml
这就是命令,命令模式
命令模式:请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
114 0
这就是命令,命令模式
|
中间件 Shell uml
迭代器模式与命令模式详解(3)
迭代器模式与命令模式详解(3)
232 0
迭代器模式与命令模式详解(3)