建造者模式UML类图:
MealBuilder(建造者接口)
interface MealBuilder { void BuildBurger(); void BuildChicken(); void BuildDrink(); Meal GetMeal(); }
KFCBuilder(具体建造者A)
public class KFCBuilder:MealBuilder { protected Meal meal=new Meal(); public void BuildBurger() { Food food = new KFC_Burger(); meal.AddFood(food); } public void BuildChicken() { Food food = new KFC_Chicken(); meal.AddFood(food); } public void BuildDrink() { Food food = new KFC_Drink(); meal.AddFood(food); } public Meal GetMeal() { return meal; } }
McDonaldsBuilder(具体建造者B)
public class McDonaldsBuilder:MealBuilder { protected Meal meal=new Meal(); public void BuildBurger() { Food food = new McDonalds_Burger(); meal.AddFood(food); } public void BuildChicken() { Food food = new McDonalds_Chicken(); meal.AddFood(food); } public void BuildDrink() { Food food = new McDonalds_Drink(); meal.AddFood(food); } public Meal GetMeal() { return meal; } }
Director(指挥者)
class Director { private MealBuilder builder; public Director(MealBuilder builder) { this.builder = builder; } public Meal BuildMeal() { this.builder.BuildBurger(); this.builder.BuildChicken(); this.builder.BuildDrink(); return this.builder.GetMeal(); } }
Meal(具体产品类)
public class Meal { private List<Food> foodList=new List<Food>(); public void AddFood(Food food) { this.foodList.Add(food); } public void show() { foreach (Food element in foodList) { element.deal(); } } }
Food(‘零件’接口)
public interface Food { void deal(); }
KFC_Burger(产品‘零件‘partA1)
public class KFC_Burger:Food { public void deal() { Console.WriteLine("您的KFC汉堡"); } }
KFC_Chicken(产品‘零件‘partA2)
public class KFC_Chicken:Food { public void deal() { Console.WriteLine("您的KFC炸鸡"); } }
KFC_Drink(产品‘零件‘partA3)
public class KFC_Drink:Food { public void deal() { Console.WriteLine("您的KFC饮料"); } }
McDonalds_Burger(产品‘零件‘partB1)
public class McDonalds_Burger:Food { public void deal() { Console.WriteLine("您的麦当劳汉堡"); } }
McDonalds_Chicken(产品‘零件‘partB2)
public class McDonalds_Chicken:Food { public void deal() { Console.WriteLine("您的麦当劳炸鸡"); } }
McDonalds_Drink(产品‘零件‘partB3)
public class McDonalds_Drink:Food { public void deal() { Console.WriteLine("您的麦当劳饮料"); } }
Client(测试类)
class Client { static void Main(string[] args) { MealBuilder b1 = new KFCBuilder(); Director d1 = new Director(b1); Meal meal1 = d1.BuildMeal(); meal1.show(); MealBuilder b2 = new McDonaldsBuilder(); Director d2 = new Director(b2); Meal meal2 = d2.BuildMeal(); meal2.show(); Console.Read(); } }
测试结果