设计模式(三)
建造者模式
1、创建食物类型接口
public interface Type {
public String getName();
public int getPrice();
}
2、创建继承食物类型接口的实体类
public class Egg implements Type{
public String getName() {
// TODO Auto-generated method stub
return "鸡蛋";
}
public int getPrice() {
// TODO Auto-generated method stub
return 15;
}
}
public class Meat implements Type{
public String getName() {
// TODO Auto-generated method stub
return "肉";
}
public int getPrice() {
// TODO Auto-generated method stub
return 20;
}
}
public class Vegetable implements Type {
public String getName() {
// TODO Auto-generated method stub
return "蔬菜";
}
public int getPrice() {
// TODO Auto-generated method stub
return 10;
}
}
3、创建套餐类
public class Meal {
private List<Type> lists = new ArrayList<Type>();
public void addFood(Type type){
lists.add(type);
}
public void showFood(){
for(Type type :lists){
System.out.println(type.getName()+":"+type.getPrice());
}
System.out.println();
}
}
4、创建套餐建造者类
public class MealBuilder {
public Meal bulidMealA() {
Meal MealA = new Meal();
MealA.addFood(new Egg());
MealA.addFood(new Vegetable());
return MealA;
}
public Meal bulidMealB() {
Meal MealB = new Meal();
MealB.addFood(new Meat());
MealB.addFood(new Vegetable());
return MealB;
}
}
5、测试
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
MealBuilder mB = new MealBuilder();
Meal mealA = mB.bulidMealA();
mealA.showFood();
Meal mealB = mB.bulidMealB();
mealB.showFood();
}
}
6、结果(控制台输出)
鸡蛋:15
蔬菜:10
肉:20
蔬菜:10
结论:
建造者模式提供了创建复杂对象的方式,该方式通过使用简单对象构造生成复杂对象,并且隐藏了构造逻辑。在本例中,通过不同的食物构造成套餐(meal),然后通过套餐建造者(MealBuilder)来建造不同的套餐,从而隐藏了套餐的构造逻辑,在测试类Main中只需调用MealBuilder的不同方法即可获取不同的套餐。