有工厂时放置getAll()方法的位置

时间:2009-06-19 18:41:21

标签: java factory

我正在做一个java应用程序。

到目前为止,这是我的文件:

人员界面。

有一个setName(String aName)方法

PersonImpl的

人员界面的实施。

PersonFactory接口

有一个createPerson()

PersonFactoryImpl

PersonFactory接口的实现。

问题是我愿意添加一个返回人员集合的方法getAll(),我不知道在哪里放置它。

我在考虑将它作为静态方法添加到PersonImpl或PersonFactoryImpl,但我不确定。

哪种方式最好?

感谢阅读!

3 个答案:

答案 0 :(得分:3)

逻辑方法是将其作为静态方法添加到PersonFactory。这是生成Person个对象的类,如果它保留对所有生成对象的引用,它应该能够回答您的getAll() API。

显然,每个Person对象都知道其他类似对象是不合理的,因此这种方法不属于那里。

编辑:鉴于它们驻留在数据库上,将PersonFactory(哪个作业是创建Person个对象)从一个去耦合可能是明智之举PersonRepository实际访问数据库(或任何持久性)并返回Person个对象。

对我来说,同一个类负责创建对象以及从数据库中获取对象,这似乎很尴尬。话虽如此,如果您的应用需要这种紧耦合,那么它可能是可以接受的。

答案 1 :(得分:3)

如果提供了另一个PersonFactory实现,是否还需要提供#getAll?如果是这样,它属于接口...然后它不能是Java中的静态方法。

鉴于此,它是您的PersonFactory的功能还是应该为您的存储机制提供抽象?如果是这样,PersonRepository接口的实现接受PersonFactory,并为getAll类型功能提供一个自然的主页似乎更合适。如果没有,那么作为具体PersonFactory的成员就足够了......

答案 2 :(得分:0)

工厂负责管理人员的实例,因此这是放置它的正确位置。此外,它应该是非静态的,就像createPerson()一样。