我有一个带字段的对象。 在一个项目中,我需要这个对象充满信息。
谁负责填写这个对象?
我想要一个像getFilledObject()这样的方法,它将一个完整的对象返回给我的程序。
我可以将这个逻辑放入主流中,并将其填入“就地”,我也可以将此方法添加到类本身中,以便它知道如何根据我传递的参数填充自己。 后一个决定是足够好的,唯一的问题是该类必须比一个简单的普通get-set类更了解它的本质。
但我觉得这两个决定都不够好。它应该是什么?一个辅助类,它只包含填充对象的逻辑?
<小时/> 你知道,是的,Factory正是我所寻找的,但它总是与多态性一起提到。在我的情况下,我根本不需要它。所以我可以称之为工厂,但它真的是他们所谓的“工厂模式”吗?
那么我们有什么结果呢? 首先,静态工厂方法
class A { ObjType1 obj1; ObjType2 obj2; public A() {} public static getA(int param1, int param2) { A a = null; ObjType3 obj3 = null; if (somelib.complexCheck(param)) { obj3 = someotherlib.getSomething(param2); // other stuff } if (obj3 != null) { // do something with getters & setters, fill a } return a; }
和工厂模式或类似的东西
class Fact { public static A getA(int param1, int param2) { // do all that stuff here } }
在静态工厂方法的情况下,我认为A类中的许多导入指令存在差异。此外,如果所有需要相同的库,我们可以将类似的静态方法放入Fact类中。
你会在两者之间做出什么选择?
答案 0 :(得分:3)
答案 1 :(得分:1)
这些信息来自哪里?它是硬编码/一致吗?使用对象的constructor。它是变量还是来自数据存储区?使用DAO pattern。
答案 2 :(得分:1)
Joshua Bloch在他的第二版 Effective Java 中讨论了这个excerpt中的静态工厂和构建器模式。
答案 3 :(得分:0)
关于你的最后一句话:'所以我可以称之为工厂,但它真的是他们所谓的“工厂模式”吗?
恕我直言,模式只是值得思考的问题。如果您正在做的事情符合确切的教科书定义(无论如何有争议),请不要太担心。 : - )