建造者模式
建造者模式
public interface Item {
String name();
float price();
Packing packing();
}
在此基础上分类食物为饮料喝汉堡分别创建他们的抽象类
public abstract class Burger implements Item{//汉堡抽象类
@Override
public Packing packing() {
return new Wrapper();
}
}
public abstract class ColdDrink implements Item{//饮料抽象类
@Override
public Packing packing() {
// TODO Auto-generated method stub
return new Bottle();
}
}
上面出现了两个未知类Wrapper喝Bottle,它们分别代表了不同的包装方式,为了使用它们组合复杂的对象,它们也需要在任何地方能用父类指向子类对象。抽象
public interface Packing {
String pack();
}
分别实现不同的包装Wrapper和Bottle
public class Bottle implements Packing{
@Override
public String pack() {
// TODO Auto-generated method stub
return "Bottle";
}
}
public class Wrapper implements Packing{
@Override
public String pack() {
// TODO Auto-generated method stub
return "Wrapper";
}
}
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 25.6f;
}
}
public class VegBurger extends Burger{
@Override
public String name() {
// TODO Auto-generated method stub
return "VegBurger";
}
@Override
public float price() {
// TODO Auto-generated method stub
return 15.3f;
}
}
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 3f;
}
}
public class Orange extends ColdDrink{
@Override
public String name() {
// TODO Auto-generated method stub
return "Oragne";
}
@Override
public float price() {
// TODO Auto-generated method stub
return 4.5f;
}
}
现在具体的食物类已经创建完毕,那么就需要放他们的容器(套餐类)
public class Meal {
private List<Item> items = new ArrayList<Item>();
public void addItem(Item item){
items.add(item);
}
public float getCost(){
float totalCost = 0;
for(Item item : items){
totalCost+=item.price();
}
return totalCost;
}
public void showItems(){
for (Item item : items) {
System.out.print("Name:"+item.name()+"\t");
System.out.print("Packing:"+item.packing().pack()+"\t");
System.out.println("Price:"+item.price());
}
}
}
接下来那么就需要构造套餐了,需要构造器
public class MealBuilder1 {
Meal meal = new Meal();
public Meal create(){
return meal;
}
public MealBuilder1 addBurger(Burger burger){
meal.addItem(burger);
return this;
}
public MealBuilder1 addColdDrink(ColdDrink coldDrink){
meal.addItem(coldDrink);
return this;
}
}
public static void main(String[] args){
MealBuilder1 builder1 = new MealBuilder1();
Meal vegMeal = builder1.addBurger(new VegBurger()).addColdDrink(new Orange()).create();
vegMeal.showItems();
System.out.println("Totlal Price:"+vegMeal.getCost());
MealBuilder1 builder2 = new MealBuilder1();
Meal chickenMeal = builder2.addBurger(new ChickenBurger()).addColdDrink(new Coke()).create();
chickenMeal.showItems();
System.out.println("Total Price:"+chickenMeal.getCost());
}
UML图就不上传了,有兴趣可以去 菜鸟教程看看