Add Factory Method Pattern