@startuml package com.iluwatar.command { class App { + App() + main(args : String[]) {static} } class Goblin { + Goblin() + toString() : String + changeSize() + changeVisibility() } enum Size { + NORMAL {static} + SMALL {static} - title : String + toString() : String + valueOf(name : String) : Size {static} + values() : Size[] {static} } abstract class Target { - LOGGER : Logger {static} - size : Size - visibility : Visibility + Target() + getSize() : Size + getVisibility() : Visibility + printStatus() + setSize(size : Size) + setVisibility(visibility : Visibility) + toString() : String {abstract} } enum Visibility { + INVISIBLE {static} + VISIBLE {static} - title : String + toString() : String + valueOf(name : String) : Visibility {static} + values() : Visibility[] {static} } class Wizard { - LOGGER : Logger {static} - redoStack : Deque - undoStack : Deque + Wizard() + castSpell(Runnable : runnable) + redoLastSpell() + toString() : String + undoLastSpell() } } Target --> "-size" Size Wizard --> "-changeSize" Goblin Wizard --> "-changeVisibility" Goblin Target --> "-visibility" Visibility Goblin --|> Target App --> "castSpell" Wizard @enduml