陈巧倩

设计模式-建造者模式

· 234 words · 2 minutes to read
Categories: CSharp
Tags: Design Pattern

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();

结论 🔗

搬砖愉快!