@startuml package com.iluwatar.lazy.loading { class App { - LOGGER : Logger {static} + App() + main(args : String[]) {static} } class Heavy { - LOGGER : Logger {static} + Heavy() } class HolderNaive { - LOGGER : Logger {static} - heavy : Heavy + HolderNaive() + getHeavy() : Heavy } class HolderThreadSafe { - LOGGER : Logger {static} - heavy : Heavy + HolderThreadSafe() + getHeavy() : Heavy } class Java8Holder { - LOGGER : Logger {static} - heavy : Supplier + Java8Holder() - createAndCacheHeavy() : Heavy + getHeavy() : Heavy } ~class HeavyFactory { - heavyInstance : Heavy ~ HeavyFactory() + get() : Heavy } } HolderThreadSafe --> "-heavy" Heavy HolderNaive --> "-heavy" Heavy HeavyFactory --> "-heavyInstance" Heavy @enduml