Java初始化对象设计
可以说我有一个Foo
类的对象foo
。 可以说Foo
班有很多描述其后代特征的领域。
当有这么多的字段时,是否最好通过Foo的构造函数来初始化它们。
Foo foo = new Foo(0, 12, 123, 2, 2, (and so on...));
或者在类的构造函数或方法中使用foo
来初始化它们。
Foo foo = new Foo();
public void initFoo() {
foo.setX(1);
foo.setY(3);
foo.setH(3);
(and so on...)
}
我会尽全力通过构造函数。 这样,你不能忘记这样做,并最终得到一个部分构造的对象。 使用构造函数自然会导致创建不可变的对象,并且这些对于能够推断其行为(尤其是在多线程环境中)是有用的,
后续的工作是使用构建器模式。 在这种情况下,您需要为构建器组件提供参数,然后构建器可以确定缺少的参数和/或如何构建该对象。
例如
FooBuilder fb = new FooBuilder();
fb.setX(1);
fb.setY(2);
// etc...
Foo f = fb.newInstance();
说了这么多,你是否需要用这么多参数构造你的对象? 这听起来像是:
x
和y
坐标作为point
等) 一般来说,我会建议你使用第一种方法来实现松耦合。 无论您的课程需要初始化多少个成员都无关紧要。
一旦你开始编写非平凡类的单元测试,你将需要这种方法,
你需要嘲笑那些成员。
如果您想了解更多与您的问题相关的设计决策,请浏览Web以了解依赖注入,单元测试,控制反转和松散耦合的更多信息。
就个人而言,我会继续你的第二个版本,即在构造函数中用setX(),setY()等进行初始化。因为你不会有部分构造对象,并且它看起来很整齐。
链接地址: http://www.djcxy.com/p/31497.html上一篇: Java initializing object design
下一篇: Would it be particuarly bad to use a StringBuilder in a C# getter?