Actions are visitors. Characters accept an Action, allowing new operations such as attack, defense, magic, and run without changing the character hierarchy.
classDiagram
direction LR
class Character {
<<abstract>>
+accept(action)
}
class Warrior
class BlackMage
class Thief
class Action {
<<interface>>
+visit(character)
}
class Attack
class Defense
class Magic
class Run
Character <|-- Warrior
Character <|-- BlackMage
Character <|-- Thief
Action <|.. Attack
Action <|.. Defense
Action <|.. Magic
Action <|.. Run
Character --> Action : accepts