@startuml package com.iluwatar.templatemethod { class HitAndRunMethod { + HitAndRunMethod() # confuseTarget(target : String) # pickTarget() : String # stealTheItem(target : String) } class HalflingThief { - method : StealingMethod + HalflingThief(method : StealingMethod) + changeMethod(method : StealingMethod) + steal() } abstract class StealingMethod { + StealingMethod() # confuseTarget(String) {abstract} # pickTarget() : String {abstract} + steal() # stealTheItem(String) {abstract} } class SubtleMethod { + SubtleMethod() # confuseTarget(target : String) # pickTarget() : String # stealTheItem(target : String) } class App { + App() + main(args : String[]) {static} } } HalflingThief --> "-method" StealingMethod HitAndRunMethod --|> StealingMethod SubtleMethod --|> StealingMethod @enduml