Design Patterns using C#