@startuml Client -> Component Component <|- ConcreteComponent Component <|-- Decorator Decorator <|-- BehaviorDecorator Decorator <|- StateDecorator interface Component { {abstract} +Request() } class ConcreteComponent { +Request() } class Decorator { -aComponent : Component* +Request() } note left of Decorator Decorator::Request() { aComponent->Request(); } end note class BehaviorDecorator { +Request() -AddedOperation() } note left of BehaviorDecorator BehaviorDecorator::Request() { Decorator::Request(); AddedOperation(); } end note class StateDecorator { -addedState +Request() } hide empty attributes hide empty methods @enduml