创建工厂 - 在构造函数中提供数据还是作为参数?

时间:2014-01-24 13:16:46

标签: java

我正在创建一个应该包装一些对象创建的工厂方法。问题:您希望在构造函数中提供所需的数据,还是作为方法本身的参数?

class PersonFactory {
    //constructor only neccessary of no param in method
    public PersonFactory(PersonDTO dto) {
        this.dto = dto;
    }

    public Person createPerson(PersonDTO dto) {
        //create the complex person
        return person;
    }

    //more methods to come
}

你会选择什么?为什么?

new PersonFactory(dto).createPerson();
new PersonFactory().createPerson(dto);

4 个答案:

答案 0 :(得分:2)

这两个选项都有效。

这取决于您是否想要到达已经设置了dto属性的工厂周围,或者只有在您使用工厂时才知道该属性。

当使用工厂的类不应该依赖PersonDTO(无论是什么)时,将它作为私有属性附加到工厂是有意义的。

但是当PersonDTO是由工厂用户创建的对象时,您可以将其提供给create-method。

答案 1 :(得分:0)

我会选择新的PersonFactory()。createPerson(dto);因为它比较方便。如果要创建更多对象,则不需要创建工厂类的新实例。

答案 2 :(得分:0)

我会去

 createPerson(dto)
对我来说,这更容易测试。 同样在这种情况下,您实际上并不需要PersonFactory的实例 - 您可以简单地将该方法设为静态。

答案 3 :(得分:0)

我用于工厂的设计规则是:

  • 在构造函数中执行繁重的工作
  • 使工厂实例可重用(理想情况下是线程安全的)
  • 方法中的实例相关内容

这意味着,我会采用new PersonFactory().createPerson(dto)方法。

即使这两种方式在本例中都有效,但对于您创建的所有工厂,更容易遵循一种标准方法。这样,您的代码以后就会更容易理解。