1. Простой и понятный, но не самый изящный способ - использовать паттерн Телескоп
public class Menu {
private final String salad; //optional
private final String soup; //required
private final String second; //required
private final String tea; //optional
private final String desert; //optional
private final String fruits; //optional
Menu(String soup, String second) {
this(soup, second, null);
}
Menu(String soup, String second, String salad) {
this(soup, second, salad, null);
}
Menu(String soup, String second, String salad, String tea) {
this(soup, second, salad, tea, null);
}
Menu(String soup, String second, String salad, String tea, String desert) {
this(soup, second, salad, tea, desert, null);
}
Menu(String soup, String second, String salad, String tea, String desert, String fruits) {
this.soup = soup;
this.second = second;
this.salad = salad;
this.tea = tea;
this.desert = desert;
this.fruits = fruits;
}
}
2. Использовать класс с пустым конструктором и множеством сеттеров. Такой паттерн называется JavaBeans. Его недостатками являются возможность создать недоконструированный объект, а так же невозможность создавать Immutable-объекты
public class Menu {
private String salad; //optional
private final String soup; //required
private final String second; //required
private String tea; //optional
private String desert; //optional
private String fruits; //optional
Menu(String soup, String second) {
this.soup = soup;
this.second = second;
}
public void setSalad(String salad) {
this.salad = salad;
}
public void setTea(String tea) {
this.tea = tea;
}
public void setDesert(String desert) {
this.desert = desert;
}
public void setFruits(String fruits) {
this.fruits = fruits;
}
}
3. Использовать шаблон Строитель. Немного усложненная структура, но зато как красиво можно собирать объекты.
public class Menu {
private final String soup; //required
private final String second; //required
private final String salad; //optional
private final String tea; //optional
private final String desert; //optional
private final String fruits; //optional
public static class MenuBuilder {
private final String soup; //required
private final String second; //required
private String salad; //optional
private String tea; //optional
private String desert; //optional
private String fruits; //optional
MenuBuilder(String soup, String second) {
this.soup = soup;
this.second = second;
}
public MenuBuilder setSalad(String salad) {
this.salad = salad;
return this;
}
public MenuBuilder setTea(String tea) {
this.tea = tea;
return this;
}
public MenuBuilder setDesert(String desert) {
this.desert = desert;
return this;
}
public MenuBuilder setFruits(String fruits) {
this.fruits = fruits;
return this;
}
public Menu build() {
return new Menu(this);
}
}
private Menu(MenuBuilder builder) {
soup = builder.soup;
second = builder.second;
salad = builder.salad;
tea = builder.tea;
desert = builder.desert;
fruits = builder.fruits;
}
public static void main(String[] args) {
Menu menu = new Menu.MenuBuilder("soup", "second")
.setDesert("desert")
.setFruits("fruits")
.setSalad("salad")
.setTea("tea")
.build();
}
}
Комментариев нет:
Отправить комментарий