{C#}设计模式辨析.建造者
作者:
码农猫爸 | 来源:发表于
2021-08-04 09:32 被阅读0次背景
- 已定型步骤中,由director提取部分步骤并预制成多种产品
- 与模板的异同
示例
using static System.Console;
namespace DesignPattern_Builder
{
public interface ICakeBuilder
{
void SetSize(bool big);
void AddEggs(int amount);
void AddVegitable(string name);
void AddSauce(bool sweet);
}
// 主厨,相当于Builder
public class Chef: ICakeBuilder
{
public void AddEggs(int amount)
=> WriteLine($"{amount} eggs {(amount > 1 ? "are" : "is")} added.");
public void AddSauce(bool sweet)
=> WriteLine($"{(sweet ? "Sweet" : "Spicy")} sauce is added.");
public void AddVegitable(string name)
=> WriteLine($"{name} is added.");
public void SetSize(bool big)
=> WriteLine($"A {(big ? "big" : "small")} size of cake is set.");
}
// 服务员,相当于Director
public class Waitor
{
// 允许多名建造者
private readonly ICakeBuilder chef;
public Director(ICakeBuilder chef)
{
this.chef= chef;
}
// 步骤需求不由建造者决定,在本类中预制产品,下同
// 全套步骤
public void CookNormal()
{
WriteLine();
chef.SetSize(false);
chef.AddEggs(1);
chef.AddVegitable("Green onion");
chef.AddSauce(true);
ReadKey();
}
// 部分步骤
public void CookSpicical()
{
WriteLine();
chef.SetSize(true);
chef.AddEggs(2);
chef.AddSauce(false);
ReadKey();
}
}
public class Client
{
public void Execute()
{
var builder= new Chef();
var director= new Waitor(builder);
director.CookNormal();
director.CookSpicical();
}
}
class Demo
{
static void Main(string[] args)
{
var client = new Client();
client.Execute();
}
}
}
本文标题:{C#}设计模式辨析.建造者
本文链接:https://www.haomeiwen.com/subject/uuwuvltx.html
网友评论