介绍
我们假设一个快餐店的案例,快餐店中有很多种类的汉堡、薯条和饮料。客人每次点的餐都可能不一样。这样这些食物的搭配就会有很多种。
建造者模式(Builder Pattern)属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。
应用场景
一些基本部件不会变,而其组合经常变化的时候。
代码案例
模拟上面的快餐店例子,创建菜单项接口:
public interface Item {
String name();
}
创建具体的食物:
public class ChickenBurger implements Item {
@Override
public String name() {
return "鸡腿堡";
}
}
public class VegBurger implements Item {
@Override
public String name() {
return "素食汉堡";
}
}
public class Coke implements Item {
@Override
public String name() {
return "可口可乐";
}
}
public class Pepsi implements Item {
@Override
public String name() {
return "百事可乐";
}
}
订单接口:
public class Meal {
private List<Item> items = new ArrayList<Item>();
public void addItem(Item item){
items.add(item);
}
public void showItems(){
for (Item item : items) {
System.out.println("菜单项 : "+item.name());
}
}
}
建造者类:
public class MealBuilder {
public Meal prepareVegMeal (){
Meal meal = new Meal();
meal.addItem(new VegBurger());
meal.addItem(new Coke());
return meal;
}
public Meal prepareNonVegMeal (){
Meal meal = new Meal();
meal.addItem(new ChickenBurger());
meal.addItem(new Pepsi());
return meal;
}
}
测试方法:
public static void main(String[] args) {
MealBuilder mealBuilder = new MealBuilder();
Meal vegMeal = mealBuilder.prepareVegMeal();
System.out.println("素食套餐");
vegMeal.showItems();
Meal nonVegMeal = mealBuilder.prepareNonVegMeal();
System.out.println("\n非素食套餐");
nonVegMeal.showItems();
}
优点
(1)建造者独立,易扩展
(2)便于控制细节风险