建造者模式精髓在于把一个复杂对象切分成由多个组件对象组成,并且组件对象可以有不同的实现,灵活组成复杂对象。
举例如下:
客户去德克士套餐,每一个套餐(meal)我们都可以看作一个复杂对象,我们可以把套餐抽象成为由简单对象(food),而food的实现又分汉堡(hb)、饮料(drink)、薯条(st)三项组成,而这三类事物又可以有不同的实现汉堡hb(超级鸡腿堡-cjjtb/双鸡堡-sjb/虾堡-xb),饮料drink(咖啡-cf/可乐-coke/橙汁-cz),薯条(大薯-ds/中薯-zs/小薯-xs)。
核心代码在于套餐类(meal)和店员类(sale),套餐类(meal)中定义一个list数组存放food对象,有可供外部调用的putFood(Food food)方法可供店员执行配置套餐。
private List<Food> foods= new ArrayList<Food>();
public void putFood(Food food){
foods.add(food);
}
店员类(sale)中定义有不同的套餐配置方法,例如超级鸡腿堡套餐
public Meal getCJJTB(){
Meal meal = new Meal();
meal.putFood(new cjjtb);
meal.putFood(new coke);
meal.putFood(new zs);
return meal;
}
而顾客通过调用店员的相应方法即可获得各类套餐。