建造者模式(Builder Pattern)
背景介绍:
小胖子决定推出一款全新的超级披萨,这款披萨拥有多种配料和特殊制作要求。为了方便灵活地构建这款披萨,小胖子决定引入建造者模式。
设计模式应用:
建造者模式
为了构建具有多种配料和特殊制作要求的超级披萨,小胖子引入了建造者模式。他创建了一个披萨建造者接口,定义了披萨的各个组成部分的构建方法。然后,通过具体的披萨建造者类,可以根据需要组合不同的配料和制作要求,构建出不同种类的超级披萨。
代码示例:
// 披萨产品类
class Pizza {
private String dough;
private String sauce;
private String topping;
public void setDough(String dough) {
this.dough = dough;
}
public void setSauce(String sauce) {
this.sauce = sauce;
}
public void setTopping(String topping) {
this.topping = topping;
}
@Override
public String toString() {
return "Pizza{" +
"dough='" + dough + '\'' +
", sauce='" + sauce + '\'' +
", topping='" + topping + '\'' +
'}';
}
}
// 披萨建造者接口
interface PizzaBuilder {
void buildDough();
void buildSauce();
void buildTopping();
Pizza getPizza();
}
// 具体披萨建造者类 - 素食披萨
class VeggiePizzaBuilder implements PizzaBuilder {
private Pizza pizza;
public VeggiePizzaBuilder() {
pizza = new Pizza();
}
@Override
public void buildDough() {
pizza.setDough("素食面团");
}
@Override
public void buildSauce() {
pizza.setSauce("番茄酱");
}
@Override
public void buildTopping() {
pizza.setTopping("蔬菜丁");
}
@Override
public Pizza getPizza() {
return pizza;
}
}
// 具体披萨建造者类 - 海鲜披萨
class SeafoodPizzaBuilder implements PizzaBuilder {
private Pizza pizza;
public SeafoodPizzaBuilder() {
pizza = new Pizza();
}
@Override
public void buildDough() {
pizza.setDough("薄皮");
}
@Override
public void buildSauce() {
pizza.setSauce("白酱");
}
@Override
public void buildTopping() {
pizza.setTopping("海鲜组合");
}
@Override
public Pizza getPizza() {
return pizza;
}
}
// 披萨导演类
class PizzaDirector {
public Pizza constructPizza(PizzaBuilder pizzaBuilder) {
pizzaBuilder.buildDough();
pizzaBuilder.buildSauce();
pizzaBuilder.buildTopping();
return pizzaBuilder.getPizza();
}
}
// 客户端
public class BuilderPatternExample {
public static void main(String[] args) {
PizzaDirector pizzaDirector = new PizzaDirector();
// 构建素食披萨
PizzaBuilder veggiePizzaBuilder = new VeggiePizzaBuilder();
Pizza veggiePizza = pizzaDirector.constructPizza(veggiePizzaBuilder);
System.out.println("素食披萨:" + veggiePizza);
// 构建海鲜披萨
PizzaBuilder seafoodPizzaBuilder = new SeafoodPizzaBuilder();
Pizza seafoodPizza = pizzaDirector.constructPizza(seafoodPizzaBuilder);
System.out.println("海鲜披萨:" + seafoodPizza);
}
}
灵活构建超级披萨
在这个例子中,建造者模式允许小胖子根据需要构建不同种类的超级披萨。通过定义披萨建造者接口和具体的披萨建造者类,可以动态地组合不同的配料和制作要求,创建出符合需求的超级披萨。