Adding Observer and Decorator patterns in C#