added Decorator Pattern