建造者模式属于创建型模式的一种。建造者模式主要是用于创建一个复杂的对象。使相同的创建过程可以创建不同的对象。建造者模式提供了一种创建对象的最优模式。建造者模式主要用于创建复合对象,复合对象就是某个类具有不同的属性。在一个对象的每一部分经常变化,但是将每一个对象组合起来的算法方式不变化的情况下使用建造者模式再合适不过。
话不多说,接下来看下建造者模式的实现类图:
先看下接口Item,可以理解为要构建对象的组成部分
public interface Item {
/**
* 食物名称接口
*
* @return
*/
String name();
/**
* 价格接口
*
* @return
*/
float price();
/**
* 食物包装接口
*
* @return
*/
Packing packing();
}
实现Item的抽象对象ColdDrink
public abstract class ColdDrink implements Item {
/**
* 价格接口
*
* @return
*/
@Override
public abstract float price();
/**
* 食物包装接口
*
* @return
*/
@Override
public Packing packing() {
return new Bottle();
}
}
继承ColdDrink的对象CokeDrink
public class CokeDrink extends ColdDrink {
/**
* 食物名称接口
*
* @return
*/
@Override
public String name() {
return "可口可乐";
}
/**
* 价格接口
*
* @return
*/
@Override
public float price() {
return 10f;
}
}
继承ColdDrink的对象PepsiDrink
public class PepsiDrink extends ColdDrink {
/**
* 食物名称接口
*
* @return
*/
@Override
public String name() {
return "百事可乐";
}
/**
* 价格接口
*
* @return
*/
@Override
public float price() {
return 20f;
}
}
在Meal对象中使用Item
public class Meal {
List<Item> items = new ArrayList<Item>();
public void addItem(Item item){
items.add(item);
}
public float getCost(){
float cost = 0.0f;
for (Item item : items) {
cost += item.price();
}
return cost;
}
public void showItems(){
for (Item item : items) {
System.out.print("Item : "+item.name());
System.out.print(", Packing : "+item.packing().packing());
System.out.println(", Price : "+item.price());
}
}
}
最终,使用MealBuilder创建Meal
public class MealBuilder {
public Meal prepareVegMeal() {
Meal meal = new Meal();
meal.addItem(new VegBurger());
meal.addItem(new CokeDrink());
return meal;
}
}