Command
The Command design pattern wraps up actions inside an object so you can run them at a later time. Think about it: if you can delay one action, you can delay many. Or, you could even set a specific time for them to happen.
Remember the Stormtrooper management system we talked about in Chapter 3, Understanding Structural Patterns? Let’s revisit that. Here’s how we can use this pattern with the attack
and move
functions we discussed earlier:
class Stormtrooper(...) {
fun attack(x: Long, y: Long) {
println("Attacking ($x, $y)")
// Actual code here
}
fun move(x: Long, y: Long) {
println("Moving to ($x, $y)")
// Actual code here
}
}
We could even use the Bridge design pattern from the previous chapter to provide the actual implementations.
We now face a challenge: our trooper can only remember one command at a time. For instance, if they begin at (0, 0)
, the top of the screen, we can...