@startuml package com.iluwatar.strategy { class App { - LOGGER : Logger {static} + App() + main(args : String[]) {static} } class DragonSlayer { - strategy : DragonSlayingStrategy + DragonSlayer(strategy : DragonSlayingStrategy) + changeStrategy(strategy : DragonSlayingStrategy) + goToBattle() } interface DragonSlayingStrategy { + execute() {abstract} } class LambdaStrategy { - LOGGER : Logger {static} + LambdaStrategy() } enum Strategy { + MeleeStrategy {static} + ProjectileStrategy {static} + SpellStrategy {static} - dragonSlayingStrategy : DragonSlayingStrategy + execute() + valueOf(name : String) : Strategy {static} + values() : Strategy[] {static} } class MeleeStrategy { - LOGGER : Logger {static} + MeleeStrategy() + execute() } class ProjectileStrategy { - LOGGER : Logger {static} + ProjectileStrategy() + execute() } class SpellStrategy { - LOGGER : Logger {static} + SpellStrategy() + execute() } } Strategy ..+ LambdaStrategy Strategy --> "-dragonSlayingStrategy" DragonSlayingStrategy DragonSlayer --> "-strategy" DragonSlayingStrategy Strategy ..|> DragonSlayingStrategy MeleeStrategy ..|> DragonSlayingStrategy ProjectileStrategy ..|> DragonSlayingStrategy SpellStrategy ..|> DragonSlayingStrategy @enduml