Вы можете использовать шаблон Builder
: Используется для очень сложного многоэтапного конструирования объектов, где число аргументов конструктора или метода будет смехотворно большим.
SandwichBuilder sb = new SandwichBuilder();
sb.addFirstBread(new BreadSlice());
sb.addCheese(new Cheese());
...
sb.addLastBread(new BreadSlice());
Sandwich s = sb.getSandwich();
Неполный SandwichBuilders
может выдать какой-то IncompleteSandwichException
, если он не завершен правильно при вызове .getSandwich()
.
Примечание: с правильно названными методами построения, вы ненужно сделать что-нибудь в определенном порядке.
Или вы можете использовать шаблон FactoryMethod
: Когда число шагов вписывается в один вызов метода с разумным количеством аргументов,и объект должен быть полностью завершен.
BreadSlice bs1 = new BreadSlice();
BreadSlice bs2 = new BreadSlice();
List<Cheese> cheeses = new ArrayList<Cheese>();
...
Sandwich s = SandwichBuilder.buildSandwich(bs1, cheeses, bs2);
Или используйте Constructor
: , который является специализированным случаем FactoryMethod
pattern
Sandwich s = new Sandwich(bs1, cheeses, bs2);
перегруженный конструктор для добавления сыра:
Sandwich s = new Sandwich(bs1, bs2);
s.addCheese(new CheeseSlice());
...
Существует множество способов сделать это в зависимости от того, насколько строгой должна быть конструкция.Например, вы можете сделать реализацию Sandwich
inner class
объекта Factory/Builder
и сделать его конструктором private
, чтобы его нельзя было создать неправильно.