Each command object wraps one action on Headquarters. GUI queues commands, can cancel queued commands, and executes them later.
classDiagram
direction LR
class GUI {
+receivePlayerCommand(command)
+cancelPlayerCommand(command)
+executePlayerCommands()
}
class Command {
<<abstract>>
+executeCommand()
+getName() String
}
class Headquarters
class CreateVillagerCommand
class CreatePaladinCommand
class GatherWoodCommand
class ShowResourcesCommand
GUI o-- Command : queued orders
Command --> Headquarters : receiver
Command <|-- CreateVillagerCommand
Command <|-- CreatePaladinCommand
Command <|-- GatherWoodCommand
Command <|-- ShowResourcesCommand
CreateVillagerCommand --> Headquarters : createVillager()
GatherWoodCommand --> Headquarters : gatherWood()