建造者模式的理解

参照的一篇简书文章,链接如下:一篇文章就彻底弄懂建造者模式(Builder Pattern)
简单说说我对建造者模式的理解吧,

我们去KFC点餐,一个food和一杯饮料的套餐,套餐一:可乐+鸡翅;套餐2:雪碧+薯条
当然KFC的针对套餐分配了服务员,你去前台点餐的时候,只需要说老板,我要套餐某某就可以了,其他的事情嘛,套餐某某的服务员会给你办理的妥妥的。

现在梳理一下对应的角色:

  • 服务员:writer = director 负责监督套餐的完成进度
  • 后厨代表:Builder 负责叫一个人去完成套餐
  • 墩子:subBuilder 真正做菜的人

这样的话套餐类需要给出,包括了哪些菜品:

class Meal{
    private String food;
    private String drink;

    public String getFood() {
        return food;
    }

    public void setFood(String food) {
        this.food = food;
    }

    public String getDrink() {
        return drink;
    }

    public void setDrink(String drink) {
        this.drink = drink;
    }
}

后厨代表需要牢记这个菜品,并且按按照套餐要求进行做菜

abstract class Builder{

    protected Meal meal = new Meal();

    abstract void buildFood();
    abstract void buildDrink();

    public Meal getResult(){
        return meal;
    }
}

好了,现在如果是套餐一的话,就叫墩子1来做菜,如果是套餐二的话,就叫墩子2来做菜,

class Meal1 extends Builder{

    @Override
    void buildFood() {
        System.out.println("炸鸡");
    }

    @Override
    void buildDrink() {
        System.out.println("可乐");
    }
}
class Meal2 extends Builder{

    @Override
    void buildFood() {
        System.out.println("薯条");
    }

    @Override
    void buildDrink() {
        System.out.println("雪碧");
    }
}

菜做完了,服务员就要去

class Writer{
    private Builder builder;//服务员先安排后厨代表

    public void setBuilder(Builder builder) {//设置是哪一个套餐
        this.builder = builder;
    }

    public Meal contruct(){
        builder.buildFood();//套餐某某的食物
        builder.buildDrink();
        return builder.getResult();
    }
}

现在顾客点餐:

public class BuilderPattrn {
    public static void main(String[] args) {
        Writer writer = new Writer();
        Builder builder = new Meal1();
        writer.setBuilder(builder);
        System.out.println("套餐1");
        writer.contruct();
    }
}
发布了74 篇原创文章 · 获赞 2 · 访问量 6482

猜你喜欢

转载自blog.csdn.net/weixin_42067668/article/details/102757005