何时使用通用实例而不是仅使用“ new”关键字

时间:2019-06-06 00:59:41

标签: c# factory-pattern strategy-pattern

我一直在考虑拥有多个页面元素,并使用PageFactory进行制表。然后我意识到最好不要键入所有想要的类型,因为我只是想获取实例。 然后,我创建了如下内容:

    public static T GetInstance<T>() where T:IPage, new()
    {
        return new T();
    }

但是关键是,我可以像创建new WelcomePage();这样的页面而不是PageFactory.GetInstance<WelcomePage>()来创建页面,而使用这样的通用方法对我来说没有任何意义。但我看到它是以前使用过的东西。

因此,使用这种通用方法获取实例有什么好处。我很高兴听到可能的需求。

1 个答案:

答案 0 :(得分:0)

鉴于这是静态方法,除了在其他通用方法中使用new之外,我认为没有比GetInstance更好的了。 (作为接口或抽象类的一部分的非静态工厂,具有超过1个实现,将更具意义,因为客户端将不依赖于特定工厂,或者例如,测试中可以使用与生产中不同的工厂)。

我希望使用new,因为:

  • 这是可以立即理解的,不需要额外研究GetInstance的实现细节
  • 假设GetInstance<T>是泛型的,并且对泛型的构造函数约束仅限于无参数构造函数new (),这意味着依赖项将通过属性或周围环境注入到T对象中,而不会这是理想的。通过构造函数进行依赖注入要好得多。