在遗留代码库中,我有一个非常大的类,其中包含太多的字段/职责。想象一下,这是一个披萨对象。
它具有高度细化的字段,如:
我知道当这三个领域都是真的时,我们有一个至尊披萨。但是,此类不能用于扩展或更改,因此我无法添加PizzaType或isSupreme()等。整个代码库中的所有人都会复制相同的if(a && b && c) then isSupreme)
逻辑。这个问题出现在很多概念中,所以我正在寻找一种方法将这个对象解构为许多子对象,例如:一个伪向后的Builder模式。
PizzaType pizzaType = PizzaUnbuilder.buildPizzaType(Pizza); //PizzaType.SUPREME
Dough dough = PizzaUnbuilder.buildDough(Pizza);
这是正确的做法吗?这种模式是否已存在?
答案 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)
。