工厂 - 在构造函数中考虑类型

时间:2013-10-21 12:10:13

标签: design-patterns dependency-injection factory spring.net

是否可以实现工厂并在构造函数中获取类型,因此.CreateInstace()将是无参数的,或者这将是反模式的,我应该尽力避免它?

我假设在系统运行时期间,工厂只应实例化一个预定义类型

2 个答案:

答案 0 :(得分:0)

对我而言,。这是因为你的工厂后期在依赖注入时不够灵活或不够坚固,因为:

public class Factory{
    public Factory(Type t, IocContainer con){
       // param assignments
    }
    public IClass GetInstance(){
        return con.Resolve<t>();
    }
}

会让你对被注入的内容感到困惑(其中2个是彼此无关的。一个是类型?另一个是IocContainer?这也使你的Factory有状态。此外,如何如果我注入接口类型?你的工厂可以从接口创建一个类吗?

相反,你为什么不接受这个班级呢?

public class Factory{
    public Factory(IClass cls){
       // param assignments
    }
    public IClass GetInstance(){
        return cls;
    }
}

这是更加自我记录和清晰的。

答案 1 :(得分:0)

  

我假设在系统运行时期间,工厂只应实例化一个预定义类型

不一定会因为这会强制您为要创建的每种具体类型创建工厂类。

构造函数注入(即通过构造函数提供类型)通常优于方法注入(即通过方法调用中的参数提供类型),但是我说如果工厂需要根据在运行时传递给它的参数创建多个类型,那么将这些参数传递给createInstance()方法而不是每个创建一个新工厂会更方便类型。

最重要的是,我通常更喜欢将参数传递给createInstance()方法,并通过构造函数向工厂提供完成工作所需的任何内容。