C#设计模式--建造者模式

换个更生活化的接口例子: 披萨订单接口

public interface IPizza 
{
    string Name { get; set; }       // 披萨名称(如"超级至尊")
    string Size { get; set; }       // 尺寸(大/中/小)
    string Crust { get; set; }      // 饼底(薄脆/芝心/经典) 
    string[] Toppings { get; set; } // 配料(芝士/培根/蘑菇等)
    string Sauce { get; set; }      // 酱料(番茄/奶油/辣味)
    bool IsHot { get; set; }        // 是否加辣 
}

️ 使用示例

// 具体披萨实现 
public class SupremePizza : IPizza 
{
    public string Name { get; set; } = "超级至尊";
    public string Size { get; set; } = "大";
    public string Crust { get; set; } = "芝心";
    public string[] Toppings { get; set; } = new[] { "培根", "香肠", "青椒", "洋葱" };
    public string Sauce { get; set; } = "番茄酱";
    public bool IsHot { get; set; } = true;
}
 
// 另一个实现 
public class SeafoodPizza : IPizza { /* 实现类似 */ }

为什么比手机例子更好?

  1. 更贴近生活:大家都点过披萨,容易理解各个属性
  2. 属性更直观
    • Size 替代 Memory(披萨尺寸 vs 手机内存)
    • Toppings 替代 Camera(配料 vs 摄像头)
  3. 可扩展性强
    • 可以轻松添加新属性(如 ExtraCheese
    • 配料用数组更符合实际情况

工厂模式应用

public interface IPizzaFactory 
{
    IPizza CreatePizza(string type);
}
 
public class PizzaHutFactory : IPizzaFactory 
{
    public IPizza CreatePizza(string type)
    {
        return type switch 
        {
            "Supreme" => new SupremePizza(),
            "Seafood" => new SeafoodPizza(),
            _ => throw new ArgumentException("不支持的披萨类型")
        };
    }
}

对比原手机接口

手机接口属性 披萨接口对应属性 说明
CPU Crust 核心部分(处理器 vs 饼底)
Screen Size 最直观的特征
Camera Toppings 特色功能(摄像头 vs 配料)
Battery IsHot 性能表现(续航 vs 辣度)

这个例子比手机配置参数更生动有趣,也更容易演示工厂模式生产不同产品的过程!

披萨建造者接口(修改版)

基于建造者模式,我们可以把披萨的制作过程拆分成多个构建步骤:

public interface IPizzaBuilder 
{
    IPizza Pizza { get; set; }  // 当前制作的披萨 
    
    void SelectSize();          // 选择尺寸 
    void ChooseCrust();         // 选择饼底 
    void AddSauce();            // 添加酱料 
    void AddToppings();         // 添加配料 
    void SetSpiceLevel();       // 设置辣度 
    
    IPizza GetPizza();          // 获取制作完成的披萨 
} 

️ 具体建造者实现(以超级至尊披萨为例)

public class SupremePizzaBuilder : IPizzaBuilder 
{
    public IPizza Pizza { get; set; } = new Pizza();
    
    public void SelectSize()
    {
        Pizza.Size = "Large";
    }
 
    public void ChooseCrust()
    {
        Pizza.Crust = "Stuffed Crust";
    }
 
    public void AddSauce()
    {
        Pizza.Sauce = "Tomato Sauce";
    }
 
    public void AddToppings()
    {
        Pizza.Toppings = new[] { "Pepperoni", "Sausage", "Green Peppers", "Onions", "Mushrooms" };
    }
 
    public void SetSpiceLevel()
    {
        Pizza.IsHot = true;
        Pizza.SpiceLevel = "Medium";
    }
 
    public IPizza GetPizza()
    {
        Pizza.Name = "Supreme Pizza";
        return Pizza;
    }
}

‍ 主管类(指导建造过程)

public class PizzaChef 
{
    public IPizza MakePizza(IPizzaBuilder builder)
    {
        builder.SelectSize();
        builder.ChooseCrust();
        builder.AddSauce();
        builder.AddToppings();
        builder.SetSpiceLevel();
        return builder.GetPizza();
    }
}

使用示例

// 创建建造者 
var pizzaBuilder = new Supre

你可能感兴趣的:(c#,设计模式,建造者模式)