2017-01-02 42 views
0

想象一下,您必須初始化一些在循環中無法處理的對象。在調用構造函數之前,您必須以提供的數據以某種方式初始化對象。最後你還想用另一種方法來使用這個對象。爲了便於閱讀和甚至計算,推薦方法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

和方法'C'也許可能是爲了減少冗餘代碼 – SomeJavaGuy

+0

@KevinEsche真寫了一個方法,但可能導致需要大量參數的方法,這又會使代碼非常不可讀。 –

+0

查找生成器模式,使其更具可讀性。此外,init()方法也爲我聞到了氣息。 – abbath

回答

4

1)爲什麼不包括init()方法在DummyObject的構造函數的內容?構造函數的目標也是對象的初始化。

2)如果你有充分的理由保持這種方式和你有很多DummyObjects以這種方式來配置,更可讀的解決方案是將提取的方法爲每個DummyObject執行初始化並添加步驟:

我會使用的方法答:

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

我不能告訴你t的關係這些對象,以及是否可以使用Facade模式將功能組合在一起或只是一個接口。我在這裏可以看到的是,你可以使用Factory模式來創建和初始化你的對象。

關於代碼的可讀性,這是你的,我寧願是方法A.