GoF design patterns implementations in C#