@startuml package com.iluwatar.factory.method { class OrcBlacksmith { + OrcBlacksmith() + manufactureWeapon(weaponType : WeaponType) : Weapon } class ElfBlacksmith { + ElfBlacksmith() + manufactureWeapon(weaponType : WeaponType) : Weapon } class OrcWeapon { - weaponType : WeaponType + OrcWeapon(weaponType : WeaponType) + getWeaponType() : WeaponType + toString() : String } interface Blacksmith { + manufactureWeapon(WeaponType) : Weapon {abstract} } class ElfWeapon { - weaponType : WeaponType + ElfWeapon(weaponType : WeaponType) + getWeaponType() : WeaponType + toString() : String } class App { - blacksmith : Blacksmith + App(blacksmith : Blacksmith) + main(args : String[]) {static} - manufactureWeapons() } interface Weapon { + getWeaponType() : WeaponType {abstract} } enum WeaponType { + AXE {static} + SHORT_SWORD {static} + SPEAR {static} + UNDEFINED {static} - title : String + toString() : String + valueOf(name : String) : WeaponType {static} + values() : WeaponType[] {static} } } ElfWeapon --> "-weaponType" WeaponType OrcWeapon --> "-weaponType" WeaponType App --> "-blacksmith" Blacksmith OrcBlacksmith ..|> Blacksmith ElfBlacksmith ..|> Blacksmith OrcWeapon ..|> Weapon ElfWeapon ..|> Weapon @enduml