重温设计模式之建造者模式

将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

看做外卖生意赚钱容易,小明也开了一家披萨外卖店。做披萨通常需要制作面饼、加馅料、加调味酱、加芝士和烘焙5个步骤,为了提高效率,小明组建了“披萨流水线”,每条流水线5个人,分别负责5个步骤;两组流水线分别制作水果披萨和海鲜披萨。

为了协调流水线的生成,保证每个步骤都被执行到位,小明又聘请了专门的监督员来监督整个制作过程。

小明学过设计模式,很快想到,这不就是建造者模式吗?

UML图:

 

代码:

public class Pizza {
    private String crust;
    private String ingredients;
    private String sauce;

    public Pizza() {
    }

    public String toString() {
        return crust + ingredients + "披萨";
    }

    public String getCrust() {
        return crust;
    }

    public void setCrust(String crust) {
        this.crust = crust;
    }

    public String getIngredients() {
        return ingredients;
    }

    public void setIngredients(String ingredients) {
        this.ingredients = ingredients;
    }

    public String getSauce() {
        return sauce;
    }

    public void setSauce(String sauce) {
        this.sauce = sauce;
    }
}
public abstract class Builder {

    protected Pizza pizza = new Pizza();

    public abstract void makeCrust();

    public abstract void addIngredients();

    public abstract void addSauce();

    public abstract void addCheese();

    public abstract void bake();

    public Pizza getPizza() {
        return pizza;
    }
}
public class FruitBuilder extends Builder {
    @Override
    public void makeCrust() {
        pizza.setCrust("芝心");
        System.out.println("制作芝心面饼");
    }

    @Override
    public void addIngredients() {
        pizza.setIngredients("水果");
        System.out.println("加入菠萝");
    }

    @Override
    public void addSauce() {
        pizza.setSauce("番茄酱");
        System.out.println("加入番茄酱");
    }

    @Override
    public void addCheese() {
        System.out.println("加入芝士");
    }

    @Override
    public void bake() {
        System.out.println("烘烤");
    }
}
public class SeafoodBuilder extends Builder {

    @Override
    public void makeCrust() {
        pizza.setCrust("经典手拍");
        System.out.println("制作经典手拍面饼");
    }

    @Override
    public void addIngredients() {
        pizza.setIngredients("海鲜");
        System.out.println("加入海鲜馅料");
    }

    @Override
    public void addSauce() {
        pizza.setSauce("香辣酱");
        System.out.println("加入香辣酱");
    }

    @Override
    public void addCheese() {
        System.out.println("加入芝士");
    }

    @Override
    public void bake() {
        System.out.println("烘烤");
    }
}
public class Director {

    private Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }

    public Pizza build() {
        builder.makeCrust();
        builder.addIngredients();
        builder.addSauce();
        builder.addCheese();
        builder.bake();
        return builder.getPizza();
    }
}

客户端:

public class Client {

    public static void main(String[] args) {

        Director director = new Director(new FruitBuilder());
        Pizza fruitPizza = director.build();
        System.out.println("制作完成: " + fruitPizza);

        director = new Director(new SeafoodBuilder());
        Pizza seafoodPizza = director.build();
        System.out.println("制作完成: " + seafoodPizza);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值