建造者模式用于 通过不同的步骤创建不同的对象
各步骤之间相对独立的情况
以 快餐店 烹制 快餐 为例
快餐 可以分为两部分 饮品(drink)和食品(food)
通过两步相对独立的操作 烹制饮品 和 烹制 食品
即可完成不同内容的 快餐
假定有两个厨师(cooker) 一位 cooker_zhou 另一位 cooker_li
由前台的接待(Director)根据顾客要求决定哪一位厨师来完成快餐
示例代码:
using System;
using System.Collections.Generic;
namespace DesignPatterns.CreatePatterns.Builder
{
public class Meal
{
private List<string> parts = null;
public Meal()
{
parts = new List<string>();
}
public void Add(string part)
{
parts.Add(part);
}
public void ShowMeal()
{
Console.WriteLine("Meal contents as follow:");
foreach (string part in parts)
{
Console.WriteLine(part);
}
}
}
public abstract class Cooker
{
public abstract void CookDrink();
public abstract void CookFood();
public abstract Meal GetMeal();
}
class CookerLi : Cooker
{
private Meal meal = new Meal();
public override void CookDrink()
{
meal.Add("orange juice");
}
public override void CookFood()
{
meal.Add("Fried Chicken");
}
public override Meal GetMeal()
{
return meal;
}
}
class CookerZhou : Cooker
{
private Meal meal = new Meal();
public override void CookDrink()
{
meal.Add("QingDao Beer");
}
public override void CookFood()
{
meal.Add("Konpao Beaf");
}
public override Meal GetMeal()
{
return meal;
}
}
class Director
{
public void AskMealForCooker(Cooker cooker)
{
cooker.CookDrink();
cooker.CookFood();
}
}
}
调用示例:
CookerLi cooker_li = new CookerLi();
CookerZhou cooker_zhou = new CookerZhou();
Director director = new Director();
director.AskMealForCooker(cooker_li);
Meal meal_li = cooker_li.GetMeal();
meal_li.ShowMeal();
director.AskMealForCooker(cooker_zhou);
Meal meal_zhou = cooker_zhou.GetMeal();
meal_zhou.ShowMeal();