@startuml package com.iluwatar.factory { class App { - LOGGER : Logger {static} + App() + main(args : String[]) {static} } interface Coin { + getDescription() : String {abstract} } class CoinFactory { + CoinFactory() + getCoin(type : CoinType) : Coin {static} } enum CoinType { + COPPER {static} + GOLD {static} - constructor : Supplier + getConstructor() : Supplier + valueOf(name : String) : CoinType {static} + values() : CoinType[] {static} } class CopperCoin { ~ DESCRIPTION : String {static} + CopperCoin() + getDescription() : String } class GoldCoin { ~ DESCRIPTION : String {static} + GoldCoin() + getDescription() : String } } CopperCoin ..|> Coin GoldCoin ..|> Coin @enduml