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