@startuml Flyweight <--* FlyweightFactory Flyweight <|-- SharedFlyweight Flyweight <|-- UnsharedFlyweight FlyweightFactory <-- Client SharedFlyweight <-- Client UnsharedFlyweight <-- Client interface Flyweight { {abstract} +Request(ExtrinsicState) } class SharedFlyweight { -intrinsicState : IntrinsicState +Request(ExtrinsicState) } class UnsharedFlyweight { -intrinsicState : IntrinsicState -extrinsicState : ExtrinsicState +Request(ExtrinsicState) } class FlyweightFactory { -flyweights : Map +GetFlyweight(Key) : Flyweight } hide empty attributes hide empty methods @enduml