Factory Design Patterns in C#