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