文章目录
建造者模式
建造者模式:类似于搭积木,不变的对象单元对于不同的组合方法,得到不同的结果。
建造者模式:将一个个简单的对象组合成一个复杂的对象
详见菜鸟教程的例子:建造者模式
这里将代码贴出,以方便后日复习:
建造者图解
包装类接口:
package builder_pattern;
public interface Packing {
String pack();
}
餐饮项目接口:Item
package builder_pattern;
public interface Item {
public String name();
// 包装类
public Packing packing();
public float price();
}
包装接口的实体类:wrapper ,bottle
package builder_pattern;
public class Wrapper implements Packing {
@Override
public String pack() {
return "Wrapper";
}
}
public class Bottle implements Packing {
@Override
public String pack() {
return "Bottle";
}
}
接口 Item 的 抽象类Burger, ColdDrink
package builder_pattern;
public abstract class Burger implements Item {
@Override
public Packing packing() {
return new Wrapper();
}
public abstract float price();
}
public abstract class ColdDrink implements Item {
@Override
public Packing packing() {
// 包装方式
return new Bottle();
}
@Override
public abstract float price();
}
抽象类Burger,ColdDrink的实体类,例:ChickenBurger
package builder_pattern;
public class ChickenBurger extends Burger{
@Override
public String name() {
return "Chicken_burger";
}
@Override
public float price() {
return 9.9f;
}
}
- item
-
Burger:抽象的汉堡
- VegBurger
- Non_VegBurger
-
ColdDrink:抽象的冷饮
- Coke
- Pepsi
-
每一套快餐的信息 Meal
package builder_pattern;
import java.util.ArrayList;
import java.util.List;
public class Meal {
// 将选中的快餐放入一个List中方便管理:
private 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.println("Item:" + item.name());
System.out.println("Packing:" + item.packing().pack());
System.out.println("Price:" + item.price() + " dollors\n");
}
}
}
预备套餐:MealBuilder
package builder_pattern;
public class MealBuilder {
public Meal prepareVegMeal() {
Meal meal = new Meal();
// 点一份素汉堡
meal.addItem(new VegBurger());
// 点一份可口可乐
meal.addItem(new Coke());
// 生成一份素套餐
return meal;
}
public Meal prepareChickenMeal() {
Meal meal = new Meal();
meal.addItem(new ChickenBurger());
meal.addItem(new Pepsi());
return meal;
}
}
开始点餐
- prepareVegBurger()
MealBuilder.prepareVegMeal
- prepareChickenBurger()
买单
Veg Meal:
Item:veg_burger
Packing:Wrapper
Price:6.6 dollors
Item:Coke
Packing:Bottle
Price:0.5 dollors
total cost:7.1
=============================
Non-Veg Meal:
Item:Chicken_burger
Packing:Wrapper
Price:9.9 dollors
Item:Pepsi
Packing:Bottle
Price:0.5 dollors
total cost:10.4