2017-01-02 7 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... 

Б

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) Почему бы не включать в себя содержание метода инициализации() в конструктор DummyObject? Целью конструктора является также инициализация объекта.

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

Я не могу сказать вам отношения между т hese objects, и если вы можете использовать шаблон Facade для группировки функциональных возможностей вместе или просто интерфейса. Здесь я вижу, что вы можете использовать шаблон Factory для создания и инициализации ваших объектов.

О читаемость кода это до вас, то, что я предпочитаю является метод А.

Смежные вопросы