2013-08-15 4 views
0

Что является наиболее эффективным и чистый способ создать объект класса, который имеет как 10 частных полей, коллекции (например, HashMap, LinkedHashMap, ArrayList и т.д.).Construct объект с большим количеством частных полей для сбора

Если я поместил в него конструктор с 10 полями, это будет похоже на кошмар.

ответ

2

Вы можете использовать Builder для этого, как это:

public class Pojo { 

    private String field1; 
    private String field2; 
    private String field3; 
    private String field4; 
    private String field5; 

    public Pojo(PojoBuilder pojoBuilder) { 
     this.field1 = pojoBuilder.field1; 
     this.field2 = pojoBuilder.field2; 
     this.field3 = pojoBuilder.field3; 
     this.field4 = pojoBuilder.field4; 
     this.field5 = pojoBuilder.field5; 
    } 

    public static class PojoBuilder { 
     String field1; 
     String field2; 
     String field3; 
     String field4; 
     String field5; 

     public PojoBuilder field1(String field1) { 
      this.field1 = field1; 
      return this; 
     } 

     public PojoBuilder field2(String field2) { 
      this.field2 = field2; 
      return this; 
     } 
     public PojoBuilder field3(String field3) { 
      this.field3 = field3; 
      return this; 
     } 
     public PojoBuilder field4(String field4) { 
      this.field4 = field4; 
      return this; 
     } 
     public PojoBuilder field5(String field5) { 
      this.field5 = field5; 
      return this; 
     } 

     public Pojo build() { 
      return new Pojo(this); 
     } 

    } 

    public String getField1() { 
     return field1; 
    } 

    public String getField2() { 
     return field2; 
    } 

    public String getField3() { 
     return field3; 
    } 

    public String getField4() { 
     return field4; 
    } 

    public String getField5() { 
     return field5; 
    } 


} 

И вы можете использовать его как это:

Pojo pojo = new PojoBuilder().field1("field1").field1("field2").field1("field3").field1("field4").field1("field5").build(); 

Я часто использую этот шаблон для построения неизменные POJO, а также.

+0

Почему вы используете окончательный для полей здесь? Что делать, если вы хотите повторно использовать этот объект позже? – mCs

+1

Это пример того, как я обычно использую его, но, спасибо, указав его, я удалю их. –

+0

Бу для их удаления. Держитесь в финале! –

2

Как насчет Builder pattern

YourClass obj = YourClass.setCollection1(...) 
          .setCollection2(...) 
          .setCollection3(...)...... 
                .build(); 

Добавленная преимуществом является то, вы просто передать требуемые значения, а остальные сохранят свои значения по умолчанию.

0

Рассмотрим Builder Pattern

YourClass classObject = new YourClass.name("someName").age(26).Sex("M").build(); 
Смежные вопросы