1 建造者模式
2
interface Packing{
public String pack();
}
class Wrapper implements Packing{
@Override
public String pack() {
return "Wrapper";
}
}
class Bottle implements Packing{
@Override
public String pack() {
return "Bottle";
}
}
interface Item{
public String name();
public Packing pack();
public float price();
}
abstract class Hambur implements Item{
@Override
public Packing pack() {
return new Wrapper();
}
@Override
public abstract float price();
}
abstract class Colddrink implements Item{
@Override
public Packing pack() {
return new Bottle();
}
@Override
public abstract float price();
}
class Mcdonald extends Hambur{
@Override
public float price() {
return 1000.0f;
}
@Override
public String name() {
return "Mcdonald";
}
}
class KFC extends Hambur{
@Override
public float price() {
return 2000.0f;
}
@Override
public String name() {
return "KFC";
}
}
class Coca extends Colddrink{
@Override
public float price() {
return 100.0f;
}
@Override
public String name() {
return "Coca";
}
}
class Pepsi extends Colddrink{
@Override
public float price() {
return 200.0f;
}
@Override
public String name() {
return "Pepsi";
}
}
class Meal{
private List<Item> items = new ArrayList<Item>();
public void addItem(Item item){
items.add(item);
}
public float getPrice(){
float cost = 0.0f;
for (Item item : items){
cost += item.price();
}
return cost;
}
public void showItem(){
for (Item item : items){
System.out.println(item.name() + " " + item.price() + " ");
}
System.out.println(getPrice());
}
}
class MealBuilder{
public Meal prepareKFC(){
Meal meal = new Meal();
meal.addItem(new KFC());
meal.addItem(new Coca());
return meal;
}
public Meal preparePepsi(){
Meal meal = new Meal();
meal.addItem(new Mcdonald());
meal.addItem(new Pepsi());
return meal;
}
}
public class Test {
public static void main(String[] args){
MealBuilder mealBuilder = new MealBuilder();
Meal meal = mealBuilder.prepareKFC();
meal.showItem();
}
}