/// <summary>
/// 食物条目
/// </summary>
public interface Item
{
string name();
Packing packing();
float Price();
}
public interface Packing{
string pack();
}
/// <summary>
/// 实现包装
/// </summary>
public class Wrapper :Packing{
public string pack(){
return "Wrapper";
}
}
public class Bottle :Packing{
public string pack(){
return "Bottle";
}
}
/// <summary>
/// 实现 Item 接口
/// </summary>
public abstract class Burger :Item{
public Packing packing(){
return new Wrapper();
}
public abstract float Price();
public abstract string name();
}
public abstract class ColdDrink :Item{
public Packing packing(){
return new Bottle();
}
public abstract float Price();
public abstract string name();
}
/// <summary>
///实现 Burger 和 ColdDrink 的实体类。
/// </summary>
public class verBurger :Burger{
public override float Price(){
return 25.0f;
}
public override string name(){
return "verBurger";
}
}
public class ChickenBurger :Burger{
public override float Price(){
return 35.0f;
}
public override string name(){
return "ChickenBurger";
}
}
public class Coke :ColdDrink{
public override float Price(){
return 15.0f;
}
public override string name(){
return "Coke";
}
}
public class Pepsi :ColdDrink{
public override float Price(){
return 20.0f;
}
public override string name(){
return "Pepsi";
}
}
/// <summary>
/// 创建一个 Meal 类
/// </summary>
public class Meal{
private List<Item> Items=new List<Item>();
public void AddItem(Item item){
Items.Add(item);
}
public float getCost(){
float cost=0.0f;
foreach(Item item in Items)
{
cost+=item.Price();
}
return cost;
}
public void showMessage(){
foreach(Item item in Items)
{
Report.Info("Item:"+item.name());
Report.Info("Packing:"+item.packing().pack());
Report.Info("price:"+item.Price());
}
}
}
/// <summary>
/// 创建一个 MealBuilder 类,实际的 builder 类负责创建 Meal 对象。
/// </summary>
public class MealBuilder{
public Meal prepareVegMeal(){
Meal meal=new Meal();
meal.AddItem(new verBurger());
meal.AddItem(new Coke());
return meal;
}
public Meal NonVegMeal(){
Meal meal=new Meal();
meal.AddItem(new ChickenBurger());
meal.AddItem(new Pepsi());
return meal;
}
}
结果: