@startuml Client -right-> Abstraction Abstraction <|-- RefinedAbstraction Abstraction o-right-> Implementor Implementor <|-- ConcreteImplementorA Implementor <|-- ConcreteImplementorB class Abstraction { -anImplementor : Implementor* +Request() } interface Implementor { {abstract} +RequestImpl() } class ConcreteImplementorA { +RequestImpl() } class ConcreteImplementorB { +RequestImpl() } hide empty attributes hide empty methods @enduml