2

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

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

  • 有意大利辣香肠
  • 有香肠
  • 有甜椒

我知道,当这三个字段都成立时,我们就有了一个至尊披萨。但是,这个类不开放扩展或更改,所以我不能添加 PizzaType 或 isSupreme() 等。整个代码库中的人们到处重复相同的if(a && b && c) then isSupreme)逻辑。这个问题出现在很多概念上,所以我正在寻找一种方法来将此对象解构为许多子对象,例如伪向后的构建器模式。

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

Dough dough = PizzaUnbuilder.buildDough(Pizza);

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

4

2 回答 2

4

适配器模式怎么样?

基本上是一个包装类,它具有您真正想要的所有功能,可以轻松地在 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();
于 2010-04-29T07:19:48.407 回答
0

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

于 2017-08-02T17:38:50.740 回答