伪后向构建器模式?

时间:2010-04-29 04:29:08

标签: java design-patterns factory-pattern single-responsibility-principle builder-pattern

在遗留代码库中,我有一个非常大的类,其中包含太多的字段/职责。想象一下,这是一个披萨对象。

它具有高度细化的字段,如:

  • hasPepperoni
  • hasSausage
  • hasBellPeppers

我知道当这三个领域都是真的时,我们有一个至尊披萨。但是,此类不能用于扩展或更改,因此我无法添加PizzaType或isSupreme()等。整个代码库中的所有人都会复制相同的if(a && b && c) then isSupreme)逻辑。这个问题出现在很多概念中,所以我正在寻找一种方法将这个对象解构为许多子对象,例如:一个伪向后的Builder模式。

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

Dough dough = PizzaUnbuilder.buildDough(Pizza);

这是正确的做法吗?这种模式是否已存在?

2 个答案:

答案 0 :(得分:3)

适配器模式怎么样?

基本上是一个包装类,它具有您真正想要的所有功能,可以轻松地来回到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();

答案 1 :(得分:0)

我认为这将是扩展函数的一个很好的用例,它在java中不存在。取而代之的是,我认为最简单的解决方案是创建一个类,并将作为扩展的方法添加到该实用程序类中作为静态方法; PizzaUtils.isSupreme(Pizza pizza)