Learning resource for design patterns with examples in C#