C# implementation of GoF design patterns