Factory Method implemented