您的位置:首页 > 产品设计 > UI/UE

Java实现(04)——建造者模式(Builder Pattern)

2016-12-06 09:22 363 查看
建造者模式一步一步地通过简单的对象创建复杂的对象。

本例介绍快餐店中的快餐,快餐有汉堡和饮料,汉堡分为蔬菜汉堡和肌肉汉堡,饮料分为百事和可口可乐。汉堡需要盒子来装,可乐需要瓶子。通过创建一个Meal类来表示点的快餐。



public interface Item {
public String name();
public Packing packing();
public float price();
}
public interface Packing {
public String pack();
}
public class Wrapper implements Packing {

@Override
public String pack() {
return "Wrapper";
}
}

public class Bottle implements Packing {

@Override
public String pack() {
return "Bottle";
}
}

public abstract class Burger implements  Item {

@Override
public Packing packing() {
return new Wrapper();
}

@Override
public abstract float price();
}
public abstract class ColdDrink implements Item {

@Override
public Packing packing() {
return new Bottle();
}

@Override
public abstract float price();
}
public class ChickenBurger extends Burger {

@Override
public String name() {
return "Chicken Burger";
}

@Override
public float price() {
return 50.5f;
}
}
public class VegBurger extends Burger {
@Override
public String name() {
return "Veg Burger";
}

@Override
public float price() {
return 25.0f;
}
}
public class Coke extends ColdDrink {
@Override
public String name() {
return "Coke";
}

@Override
public float price() {
return 30.0f;
}
}
public class Pepsi extends ColdDrink {

@Override
public String name() {
return "Pepsi";
}

@Override
public float price() {
return 35.0f;
}
}

public class Meal {
private List<Item> items = new ArrayList<Item>();
public void addItem(Item item) {
items.add(item);
}
public float getCost() {
float cost = 0;
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().pack());
System.out.println(",Price: " + item.price());
}
}
}
public class MealBuilder {

4000
public Meal prepareVegMeal() {
Meal meal = new Meal();
meal.addItem(new VegBurger());
meal.addItem(new Coke());
return meal;
}

public Meal prepareNonVegMeal() {
Meal meal = new Meal();
meal.addItem(new ChickenBurger());
meal.addItem(new Pepsi());
return meal;
}
}
public class Demo {
public static void main(String[] args) {
MealBuilder mealBuilder = new MealBuilder();
Meal vegMeal = mealBuilder.prepareVegMeal();
System.out.println("Veg Meal");
vegMeal.showItems();
System.out.println("Total Cost: " + vegMeal.getCost());

Meal nonVegmeal = mealBuilder.prepareNonVegMeal();
System.out.println("\n\nNon-Veg Meal");
nonVegmeal.showItems();
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 Cost: 55.0

Non-Veg Meal
Item: Chicken Burger,Packing: Wrapper,Price: 50.5
Item: Pepsi,Packing: Bottle,Price: 35.0
Total Cost: 85.5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: