不可循环初始化的代码可读性

Code-readability of non-loopable initilazations

想象一下,您必须初始化一些您无法真正在循环中处理的对象。除了调用构造函数之外,您还必须使用提供的数据以某种方式初始化对象。最后,您还想以不同的方法使用该对象。为了可读性甚至计算,是否推荐方法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...

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);
    }

我无法告诉您这些对象之间的关系,以及您是否可以使用 Facade 模式将功能组合在一起或只是一个接口。我在这里看到的是您可以使用工厂模式来创建和初始化您的对象。

关于代码的可读性由你决定,我更喜欢方法A。