首页 > 代码库 > C#设计模式之建造者模式

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

    建造者模式可以将部件本身和它们的组装过程分开,关注如何一步步创建一个包含多个组成部分的复杂对象,用户只需要指定复杂对象的类型即可得到该对象,而无须知道其内部的具体构造细节。

建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式的定义:

将客户端与包含多个部件的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可;

关注如何逐步创建一个复杂的对象,不同的建造者定义了不同的创建过程;

建造者模式的结构:

建造者模式包含以下4个角色:

Builder(抽象建造者)

ConcreteBuilder(具体建造者)

Product(产品)

Director(指挥者)

例子:

/// <summary>
/// 抽象建造者
/// </summary>
public abstract class Builder
{
    public abstract void BuilderPartA();
    public abstract void BuilderPartB();
    public abstract void BuilderPartC();

    /// <summary>
    /// //创建产品对象
    /// </summary>
    protected Product product = new Product();
    /// <summary>
    /// 返回产品对象
    /// </summary>
    /// <returns></returns>
    public Product GetResult()
    {
        return product;
    }
}
/// <summary>
/// 产品类
/// </summary>
public class Product
{
    //生产的产品
    public string PartA { get; set; }
    public string PartB { get; set; }
    public string PartC { get; set; }
}
/// <summary>
/// 具体建造者
/// </summary>
public class ConcreteBuilder:Builder
{
    /// <summary>
    /// 产品A
    /// </summary>
    public override void BuilderPartA()
    {
        product.PartA = "A1";
        Console.WriteLine("生产了A1产品");
    }
    /// <summary>
    /// 产品B
    /// </summary>
    public override void BuilderPartB()
    {
        product.PartB = "B1";
        Console.WriteLine("生产了B1产品");
    }
    /// <summary>
    /// 产品C
    /// </summary>
    public override void BuilderPartC()
    {
        product.PartC = "C1";
        Console.WriteLine("生产了C1产品");
    }
}
/// <summary>
/// 指挥者
/// </summary>
public class Director
{
    private Builder _builder;
    public Director(Builder builder)
    {
        this._builder = builder;
    }
    public void SetBuilder(Builder builder)
    {
        this._builder = builder;
    }
    /// <summary>
    /// 产品构建与组装方法
    /// </summary>
    /// <returns></returns>
    public Product Construct()
    {
        _builder.BuilderPartA();
        _builder.BuilderPartB();
        _builder.BuilderPartC();
        return _builder.GetResult();
    }
}

 

//客户端调用
Builder builder = new ConcreteBuilder();
Director director = new Director(builder);
Product product = director.Construct();

 

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