参照的一篇简书文章,链接如下:一篇文章就彻底弄懂建造者模式(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();
}
}