想象一下,您必须初始化一些在循环中无法真正处理的对象。除了调用构造函数之外,您还必须以提供的数据以某种方式初始化对象。最后,您还希望在不同的方法中使用该对象。为了便于阅读,甚至计算,建议使用方法A或B吗?
方法A
DummyObject a = new DummyObject("fs", "y", 4);
a.init("aseas", true);
otherObjectA.addDummy(a);
DummyObject b = new DummyObject("qwe", "sd", 8);
b.init("a4rhs", true);
otherObjectA.addDummy(b);
DummyObject c = new DummyObject("j", "xe", 39);
c.init("as", false);
otherObjectB.addDummy(c);
DummyObject d = new DummyObject("qw", "k", 12);
d.init("sdfs", true);
otherObjectC.addDummy(d);
// and so on...
方法B
DummyObject a = new DummyObject("fs", "y", 4);
DummyObject b = new DummyObject("qwe", "sd", 8);
DummyObject c = new DummyObject("j", "xe", 39);
DummyObject d = new DummyObject("qw", "k", 12);
a.init("aseas", true);
b.init("a4rhs", true);
c.init("as", false);
d.init("sdfs", true);
otherObjectA.addDummy(b);
otherObjectB.addDummy(c);
otherObjectA.addDummy(a);
otherObjectC.addDummy(d);
// and so on...
答案 0 :(得分:4)
1)为什么不在DummyObject的构造函数中包含init()方法的内容?构造函数的目标也是对象的初始化。
2)如果您有充分的理由保持这种方式并且您有许多DummyObjects以这种方式配置,那么更可读的解决方案是提取一个方法来执行初始化并为每个DummyObject添加步骤:
我会使用方法A:
DummyObject d = new DummyObject("qw", "k", 12);
d.init("sdfs", true);
otherObjectC.addDummy(d);
我将提取一个类似的新方法:
DummyContainer container = ...;
DummyObject a = new DummyObject("qw", "k", 12);
initAndAddDummyObject(a, container,"sdfs",true);
...
DummyObject b = new DummyObject("qwe", "sd", 8);
initAndAddDummyObject(b, container,"a4rhs", true);
...
public void initAndAddDummyObject(DummyObject source, DummyContainer container, String initString, boolean initBoolean){
source.init(initString, initBoolean);
container.addDummy(source);
}
答案 1 :(得分:2)
我无法告诉你这些对象之间的关系,以及你是否可以使用Facade模式将功能组合在一起或只是一个界面。我在这里看到的是你可以使用Factory模式来创建和初始化你的对象。
关于代码可读性,它取决于您,我更喜欢的是方法A.