如何解决带有抽象类的构建器模式
我正在尝试使用 Pizza 示例来学习和实现构建器模式。
我正在尝试扩展解决方案,我必须再完成 1 件事:
用户应该能够订购特定的比萨(夏威夷、肉类、素食 ) 中进行了一些自定义。示例 --> 在肉比萨中 --> 加入鸡肉 + 培根
寻找关于以更简洁的方式实现这一点的建议(避免 if-else)
这是我的 Pizza 和 PizzaBuilder 类:
public class Pizza {
private String dough;
private String sauce;
private String toppings;
public Pizza(PizzaBuilder pizzaBuilder) {
this.dough = pizzaBuilder.dough;
this.sauce = pizzaBuilder.sauce;
this.toppings = pizzaBuilder.toppings;
}
public void setDough(String dough) {
this.dough = dough;
}
public void setSauce(String sauce) {
this.sauce = sauce;
}
public void setToppings(String toppings) {
this.toppings = toppings;
}
abstract static class PizzaBuilder {
private String dough;
private String sauce;
private String toppings;
protected Pizza pizza;
abstract void addDough();
abstract void addSauce();
abstract void addToppings();
public PizzaBuilder addDough(String dough) {
this.dough = dough;
return this;
}
public PizzaBuilder addSauce(String sauce) {
this.sauce = sauce;
return this;
}
public PizzaBuilder addToppings(String toppings) {
this.toppings = toppings;
return this;
}
public Pizza bakeAPizza() {
return pizza;
}
public PizzaBuilder makeAPizza() {
getPizza();
this.addDough();
this.addSauce();
this.addToppings();
return this;
}
public PizzaBuilder getPizza() {
pizza = new Pizza(this);
return this;
}
}
@Override
public String toString() {
return "Pizza{" + "dough='" + dough + '\'' + ",sauce='" + sauce + '\'' + ",toppings='" + toppings + '\'' + '}';
}
}
这是我的 MeatPizzaBuilder 类:
public class MeatPizzaBuilder extends PizzaBuilder {
@Override
void addDough() {
pizza.setDough("Italian Wheat");
}
@Override
void addSauce() {
pizza.setSauce("mustard");
}
@Override
void addToppings() {
pizza.setToppings("Meat");
}
}
类似于 MeatPizzaBuilder:我有 HawaainPizzaBuilder、VeggiePizzaBuilder 和 GenericPizzaBuilder。这是我的 GenericPizzaBuilder 类:
public class GenericPizzaBuilder extends PizzaBuilder {
@Override
void addDough() {
}
@Override
void addSauce() {
}
@Override
void addToppings() {
}
}
最后是 PizzaShop(主要方法)
public class PizzaShop {
public static void main(String[] args) {
Pizza hawaiinPizza = new HawaainPizzaBuilder().makeAPizza().bakeAPizza();
Pizza meatPizza = new MeatPizzaBuilder().makeAPizza().bakeAPizza();
Pizza veggiePizza = new VeggiePizzaBuilder().makeAPizza().bakeAPizza();
Pizza genericPizza = new GenericPizzaBuilder()
.addDough("Test")
.addSauce("Test Sauce")
.addToppings("All Veggeis minus brocolli")
.getPizza()
.bakeAPizza();
System.out.println("Here is your Hawaiin Pizza: "+ hawaiinPizza.toString());
System.out.println("Here is your Meat Pizza: "+ meatPizza.toString());
System.out.println("Here is your Veggie Pizza: "+ veggiePizza.toString());
System.out.println("Here is your Generic Pizza: "+ genericPizza.toString());
}
}
所以用户应该能够说:
我想吃鸡肉披萨
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。