Образец псевдо-обратного строителя? - PullRequest
2 голосов
/ 29 апреля 2010

В устаревшей кодовой базе у меня очень большой класс со слишком большим количеством полей / обязанностей. Представьте, что это объект «Пицца».

Имеет очень гранулированные поля, такие как:

  • hasPepperoni
  • hasSausage
  • hasBellPeppers

Я знаю, что когда эти три поля верны, у нас есть Высшая пицца. Однако этот класс не открыт для расширения или изменения, поэтому я не могу добавить PizzaType или isSupreme () и т. Д. Люди по всей базе кода дублируют одну и ту же логику if(a && b && c) then isSupreme) повсюду. Эта проблема затрагивает довольно много концепций, поэтому я ищу способ деконструировать этот объект на множество подобъектов, например, шаблон псевдо-обратного построения.

PizzaType pizzaType = PizzaUnbuilder.buildPizzaType(Pizza); //PizzaType.SUPREME

Dough dough = PizzaUnbuilder.buildDough(Pizza);

Это правильный подход? Этот шаблон уже существует?

Ответы [ 2 ]

3 голосов
/ 29 апреля 2010

Как насчет шаблона адаптера?

По сути, это класс-оболочка, обладающий всеми необходимыми вам функциями, которые можно легко переходить назад и вперед в класс Pizza.

MenuPizza myPizza = new MenuPizza(pizza);
PizzaType pizzaType = myPizza.getPizzaType();
DoughType doughType = myPizza.getDoughType();

И вы могли бы обеспечить обратную функциональность ...

MenuPizza otherPizza = new MenuPizza(PizzaType.SUPREME, DoughType.SOUR);
Pizza pizzaPOJO = otherPizza.getPizzaPOJO();
0 голосов
/ 02 августа 2017

Я думаю, что это был бы отличный вариант использования функций расширения, которых нет в java. Вместо этого самое простое решение на мой взгляд - создать класс и добавить методы, которые будут расширениями в этот служебный класс, в качестве статических методов; PizzaUtils.isSupreme(Pizza pizza).

...