建造者模式

//Main.java
//建造者模式Builder Pattern,创建型模式的一种
//主要用于自动生成复杂对象,即包含多个对象的对象(宏?)
//与工厂模式相比,建造者模式更加关注零件装配的顺序
//增加套餐种类直接在建造者类中添加相应建造代码即可

import java.util.List;
import java.util.ArrayList;

//包装接口与其实现
interface Packages{
	public String getName();
}

class Bag implements Packages{
	public String getName(){
		return "Bag";
	}
}
class Bottle implements Packages{
	public String getName(){
		return "Bottle";
	}
}

//食物接口与其实现
interface Foods{
	public String getName();
	public Packages getPack();
	public float getPrice();
}
//食物接口的第一层抽象类
abstract class Burger implements Foods{
	public Packages getPack(){
		return new Bag();
	}
}
abstract class Drink implements Foods{
	public Packages getPack(){
		return new Bottle();
	}
}
//食物接口的第二层实现类
//汉堡类
class ChickenBurger extends Burger{
	public String getName(){
		return "Chicken Burger";
	}
	public float getPrice(){
		return 50.5f;
	}
}
class VegBurger extends Burger{
	public String getName(){
		return "Veg Burger";
	}
	public float getPrice(){
		return 25.0f;
	}
}
//饮料类
class Coke extends Drink{
	public String getName(){
		return "Coke";
	}
	public float getPrice(){
		return 30.0f;
	}
}
class Pepsi extends Drink{
	public String getName(){
		return "Pepsi";
	}
	public float getPrice(){
		return 35.0f;
	}
}

class SetMenu{
	private List<Foods> foods=new ArrayList<Foods>();
	public void addFoods(Foods food){
		foods.add(food);
	}
	public void showFoods(){
		for(Foods food:foods){
			System.out.println(food.getName()+"+"+food.getPack().getName()+"+"+food.getPrice());
		}
	}
	public float getPrice(){
		float price=0.0f;
		for(Foods food:foods){
			price+=food.getPrice();
		}
		return price;
	}
}

class SetMenuBuilder{
	public SetMenu prepareChickenSetMenu(){
		SetMenu setmenu=new SetMenu();
		setmenu.addFoods(new ChickenBurger());
		setmenu.addFoods(new Coke());
		return setmenu;
	}
	public SetMenu prpareVegSetMenu(){
		SetMenu setmenu=new SetMenu();
		setmenu.addFoods(new VegBurger());
		setmenu.addFoods(new Pepsi());
		return setmenu;
	}
}

public class Main{
	
	public static void main(String[] args){
		SetMenuBuilder builder=new SetMenuBuilder();
		SetMenu setmenu1=builder.prepareChickenSetMenu();
		SetMenu setmenu2=builder.prpareVegSetMenu();
		
		System.out.println("Chicken SetMenu:");
		setmenu1.showFoods();
		System.out.println("Total Price: "+setmenu1.getPrice());
		System.out.println("----------------------");
		
		System.out.println("Vegtable SetMenu:");
		setmenu2.showFoods();
		System.out.println("Total Price: "+setmenu2.getPrice());
		
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值