Builder建造者模式又称生成器模式属于创建型设计模式,用于将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
Design Pattern:Builder 🔗
基本介绍 🔗
构成 🔗
- Builder:抽象建造者,用于创建一个Product对象的各个部件指定抽象接口。
- ConcreteBuilder:实际建造者,实现抽象建造者角色Builder的方法。
- Director:监督者,从Builder那里获取单独的构建流程,并定义构建产品的顺序。
- Product:产品,正在构建的复杂对象。包括定义的类和装配组件的接口。
优点 🔗
- 建造者类之间是相互独立的,容易扩展,对建造过程逐步细化,而不对其他的模块产生任何影响。
缺点 🔗
- 代码量有所增加Build对象以及Director类。
实例 🔗
C#中建造者模式的实例,下面我们来到富士康的手机装配车间。
- Builder
/// <summary>
/// 抽象建造者
/// </summary>
public abstract class Builder
{
// 安装CPU
public abstract void BuildCPU();
// 安装屏幕
public abstract void BuildScreen();
public abstract Phone GetPhone();
}
- ConcreteBuilder
/// <summary>
/// 实际创建者,华为、苹果
/// </summary>
public sealed class PingGuoBuilder : Builder
{
Phone pingGuo = new Phone();
public override void BuildCPU()
{
pingGuo.Add("PingGuo CPU");
}
public override void BuildScreen()
{
pingGuo.Add("PingGuo Screen");
}
public override Phone GetPhone()
{
return pingGuo;
}
}
/// <summary>
/// 实际创建者,华为、苹果
/// </summary>
public sealed class HuaWeiBuilder : Builder
{
Phone huaWei = new Phone();
public override void BuildCPU()
{
huaWei.Add("HuaWei CPU");
}
public override void BuildScreen()
{
huaWei.Add("HuaWei Screen");
}
public override Phone GetPhone()
{
return huaWei;
}
}
- Director
/// <summary>
/// 监督者 负责流程和顺序
/// </summary>
public class Director
{
// 组装手机
public void Construct(Builder builder)
{
builder.BuildCPU();
builder.BuildScreen();
}
}
- Product
/// <summary>
/// 手机类
/// </summary>
public sealed class Phone
{
// 手机部件集合
private List<string> parts = new List<string>();
// 把单个部件添加到手机部件集合中
public void Add(string part)
{
parts.Add(part);
}
public void Show()
{
Console.WriteLine("手机组装开始");
foreach (string part in parts)
{
Console.WriteLine(part + "组件已安装完毕");
}
Console.WriteLine("手机组装结束");
}
}
实际运行:
Director director = new Director();
Builder pingGuoBuilder = new PingGuoBuilder();
Builder huaWeiBuilder = new HuaWeiBuilder();
director.Construct(pingGuoBuilder);
Phone pingGuo = pingGuoBuilder.GetPhone();
pingGuo.Show();
director.Construct(huaWeiBuilder);
Phone huaWei = huaWeiBuilder.GetPhone();
huaWei.Show();
结论 🔗
搬砖愉快!