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 { /* 实现类似 */ }
Size
替代 Memory
(披萨尺寸 vs 手机内存)Toppings
替代 Camera
(配料 vs 摄像头)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