目录

行为型:命令模式

释义

命令模式,将请求封装为命令类,传给调用类,调用类寻找合适的对象执行命令。

/%E8%A1%8C%E4%B8%BA%E5%9E%8B%E5%91%BD%E4%BB%A4%E6%A8%A1%E5%BC%8F/%E8%A1%8C%E4%B8%BA%E5%9E%8B%EF%BC%9A%E5%91%BD%E4%BB%A4%E6%A8%A1%E5%BC%8F.resources/E3E8920B-0990-41E3-9B10-75E771363300.png
命令模式
调用类Call,使用Command命令。将BuyFoodSellFood两条命令交给Food去执行,分别调用Food中的buy()sell()

命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
interface Command() {
    fun execute()
}

class BuyFood(val food: Food) {
    fun execute() { 
        food.buy() 
    }
}

class SellFood(val food: Food) {
    fun execute() { 
        food.sell()
    }
}

请求类

1
2
3
4
class Food {
    fun buy() { ... }
    fun sell() { ... }
}

调用类

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
class Call(
    // 创建一个命令队列
    val commands: MutableList<Command> =  mutableListOf<Command>()
) {
    // 向命令队列中新增命令
    fun addCommand(command: Command) {
        list.add(command)
    }
    
    // 执行命令
    fun executeCommand() {
        for(command in commands) {
            command.execute()
        }
    }
}

使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
fun main() {

    // 命令目标对象
    val food: Food = Food()
    // 命令
    val buyFood: BuyFood = BuyFood()
    val sellFood: SellFood = SellFood()
    // 命令调度器
    val call: Call = Call()
    
    // 添加命令
    call.addCommand(buyFood)
    call.addCommand(sellFood)
    // 执行命令
    call.executeCommand()
    
}