谁负责设置对象属性?

时间:2009-12-16 13:59:39

标签: java

我有一个带字段的对象。 在一个项目中,我需要这个对象充满信息。

谁负责填写这个对象?

我想要一个像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类中。

你会在两者之间做出什么选择?

4 个答案:

答案 0 :(得分:3)

  

仅包含的辅助类   逻辑来填充对象

称为Factory Class。看来这就是你需要的。

另外,请查看Dependency Injection

答案 1 :(得分:1)

这些信息来自哪里?它是硬编码/一致吗?使用对象的constructor。它是变量还是来自数据存储区?使用DAO pattern

答案 2 :(得分:1)

Joshua Bloch在他的第二版 Effective Java 中讨论了这个excerpt中的静态工厂构建器模式。

答案 3 :(得分:0)

关于你的最后一句话:'所以我可以称之为工厂,但它真的是他们所谓的“工厂模式”吗?
恕我直言,模式只是值得思考的问题。如果您正在做的事情符合确切的教科书定义(无论如何有争议),请不要太担心。 : - )