[TOC]
例子
我们假设一个快餐店的商业案例,其中,一个典型的套餐可以是一个汉堡(Burger)和一杯冷饮
(Cold drink)。汉堡(Burger)可以是素食汉堡(Veg Burger)或鸡肉汉堡(Chicken Burger)
,它们是包在纸盒中。冷饮(Cold drink)可以是可口可乐(coke)或百事可乐(pepsi),它们是
装在瓶子中。
我们将创建一个表示食物条目(比如汉堡和冷饮)的 Item 接口和实现 Item 接口的实体类,以及一个
表示食物包装的 Packing 接口和实现 Packing 接口的实体类,汉堡是包在纸盒中,冷饮是装在瓶子中
。
然后我们创建一个 Meal 类,带有 Item 的 ArrayList 和一个通过结合 Item 来创建不同类型的 Meal
对象的 MealBuilder。BuilderPatternDemo,我们的演示类使用 MealBuilder 来创建一个 Meal。
分析
分析:
分为两种 ,一种是汉堡 、一种是冷饮
汉堡又分为 : 素食汉堡 、 鸡肉汉堡 这些都包装在盒子中
冷饮又分为: 可口可乐 、 百事可乐 这些放在瓶子中
步骤
1、创建 :食物条目类Item
{名称 、 包装 、 价格 、}和食物包装pack
的接口;
Item
类
package Builder;
/**
* 食物条目
* @author Administrator
*
*/
public interface Iteam {
/**
* 名称
* @return
*/
public String name();
/**
* 包裹
* @return
*/
public Packing packing();
/**
* 价格
* @return
*/
public float price();
}
Packing
类
package Builder;
public interface Packing {
/**
*
* @return
*/
public String pack();
}
2、实现包装pack
接口的两个类: 盒子Wrapper
、瓶子Bottle
;
Wrapper
类
package Builder;
public class Wrapper implements Packing{
@Override
public String pack() {
return "Wrapper";
}
}
Bottle
类
package Builder;
public class Bottle implements Packing{
@Override
public String pack() {
return "Bottle";
}
}
3、实现 食物条目Item
接口的类: 汉堡Burger
、 冷饮ColdDrink
;
Burger
类
package Builder;
public abstract class Burger implements Iteam{
@Override
public Packing packing() {
// TODO Auto-generated method stub
return new Wrapper();
}
@Override
public abstract float price();
}
ColdDrink
类
package Builder;
public abstract class ColdDrink implements Iteam{
@Override
public Packing packing() {
return new Bottle();
}
@Override
public abstract float price();
}
4、创建 汉堡 和 冷饮 的具体类 : 素食汉堡 VegBurger
、 鸡肉汉堡ChickenBurger
、可
口可乐coke
、百事可乐Pepsi
;
VegBurger类
package Builder;
public class VegBurger extends Burger{
@Override
public String name() {
// TODO Auto-generated method stub
return "Veg Burger";
}
@Override
public float price() {
// TODO Auto-generated method stub
return 25.0f;
}
}
ChickenBurger类
package Builder;
public class ChickenBurger extends Burger{
@Override
public String name() {
// TODO Auto-generated method stub
return "Chicken Burger";
}
@Override
public float price() {
// TODO Auto-generated method stub
return 45.0f;
}
}
Pepsi类
package Builder;
public class Pepsi extends ColdDrink{
@Override
public String name() {
// TODO Auto-generated method stub
return "Pepsi";
}
@Override
public float price() {
// TODO Auto-generated method stub
return 35.0f;
}
}
coke类
package Builder;
public class Coke extends ColdDrink{
@Override
public String name() {
// TODO Auto-generated method stub
return "Coke";
}
@Override
public float price() {
// TODO Auto-generated method stub
return 30.0f;
}
}
5、创建 Meal
类 、对Item
中的类型 进行价格和显示的类;
Meal类
package Builder;
import java.util.ArrayList;
import java.util.List;
public class Meal {
private List<Iteam> iteams = new ArrayList<Iteam>();
public void addMeal(Iteam iteam) {
iteams.add(iteam);
}
public float getCost() {
float cost = 0.0f;
for (Iteam iteam : iteams) {
cost += iteam.price();
}
return cost;
}
public void showItem() {
for (Iteam iteam : iteams) {
System.out.print("Item : " + iteam.name());
System.out.print(", Packing : " + iteam.packing().pack());
System.out.println(", Price : " + iteam.price());
}
}
}
6、BuilderMeal
类 实际的Builder 类 ,负责创建Meal
对象;
BuilderMeal类
package Builder;
public class MealBuilder {
public Meal prepareVegMeal() {
Meal meal = new Meal();
meal.addMeal(new VegBurger());
meal.addMeal(new Coke());
return meal;
}
public Meal prepareNonVegMeal() {
Meal meal = new Meal();
meal.addMeal(new ChickenBurger());
meal.addMeal(new Pepsi());
return meal;
}
}
7、BuilderPatternDemo
,使用MealBuilder
来进行运行 ,(就是我们的Client
)
BuilderPatternDemo类
package Builder;
public class BuilderPatternDemo {
public static void main(String[] args) {
MealBuilder mealBuilder = new MealBuilder();
Meal vegMeal = mealBuilder.prepareVegMeal();
System.out.println("Veg Meal");
vegMeal.showItem();
System.out.println("Total cost"+vegMeal.getCost());
Meal nonvegMeal = mealBuilder.prepareNonVegMeal();
System.out.println("Veg Meal");
nonvegMeal.showItem();
System.out.println("Total cost"+nonvegMeal.getCost());
}
}
结果
Veg Meal
Item : Veg Burger, Packing : Wrapper, Price : 25.0
Item : Coke, Packing : Bottle, Price : 30.0
Total cost55.0
Veg Meal
Item : Chicken Burger, Packing : Wrapper, Price : 45.0
Item : Pepsi, Packing : Bottle, Price : 35.0
Total cost80.0