@startuml !include theme.ipuml skinparam style strictuml skinparam Linetype ortho class Client class Component <> { + execute() -- } class ConcComponent as "Concrete\nComponent" { ... -- + execute() } class BaseDecorator as "Base Decorator" { - wrappee: Component + BaseDecorator(c: Component) + execute() } class ConcDecorator as "Concrete\nDecorators" { ... -- + execute() + extra() } hide Client members hide circle Client --> Component Component <|.. ConcComponent Component <|.. BaseDecorator Component <--o BaseDecorator BaseDecorator <|-- ConcDecorator ConcComponent -right[hidden] BaseDecorator note right of Client a = new ConcComponent() b = new ConcDecorator1(a) c = new ConcDecorator1(b) c.execute() // Decorator -> Decorator -> Component end note note right of BaseDecorator::BaseDecorator wrappee = c end note note right of BaseDecorator::execute wrappee.execute() end note note right of ConcDecorator::execute super::execute() extra() end note @enduml " referenced from