建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。
我们假设一个快餐店的商业案例,其中,一个典型的套餐可以是一个汉堡(Burger)和一杯冷饮(Cold drink)。汉堡(Burger)可以是素食汉堡(Veg Burger)或鸡肉汉堡(Chicken Burger),它们是包在纸盒中。冷饮(Cold drink)可以是可口可乐(coke)或百事可乐(pepsi),它们是装在瓶子中。
#region 基本接口 interface Item { float price(); string name(); Packing packing(); } //包裹 interface Packing { string pack(); } #endregion
#region 包裹类 class Wapper : Packing { public string pack() { return "wapper"; } } class Bottle:Packing { public string pack() { return "bottle"; } } #endregion
#region 大的抽象类 abstract class Burger : Item { public abstract string name(); public Packing packing() { return new Wapper(); } public abstract float price(); } abstract class ColdDrink : Item { public abstract string name(); public Packing packing() { return new Bottle(); } public abstract float price(); } #endregion
#region 扩展的具体类 class VegBurger : Burger { public override string name() { return "蔬菜汉堡"; } public override float price() { return 8.0f; } } class ChickenBurger: Burger { public override string name() { return "麦辣鸡腿堡"; } public override float price() { return 18.0f; } } class Coke : ColdDrink { public override string name() { return "可口可乐"; } public override float price() { return 6.0f; } } class Pepsi : ColdDrink { public override string name() { return "百事可乐"; } public override float price() { return 5.0f; } } #endregion
#region 点餐类 class Meal { private List<Item> _itemList = new List<Item>(); public void Add(Item item) { _itemList.Add(item); } public void Remove(Item item) { _itemList.Remove(item); } public void ShowMeal() { foreach (Item item in _itemList) { Console.WriteLine("name:{0},price{1},package:{2}",item.name(), item.price(), item.packing().pack()); } } } #endregion
static void Main(string[] args) { Meal meal = new Meal(); meal.Add(new ChickenBurger()); meal.Add(new Pepsi()); meal.ShowMeal(); Console.ReadKey(); }
建造者模式就是可以一个个堆,重点是都实现最基本的接口,然后在调用建造者的类的时候,通过这个基本接口调用实际类的对象,将入列表中等待使用,完成建造。
来源:https://www.cnblogs.com/ningxinjie/p/12220619.html