add Decorator pattern