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

时间:2017-01-02 13:58:51

标签: java optimization code-readability

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

2 个答案:

答案 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.