the Decorator pattern