C#设计模式:10.建造者模式 u3d学习总结笔记本

建造者模式(Builder Pattern)

使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。

建造者模式更加关注与零件装配的顺序。

产品不需要抽象类,由于建造模式的创建出来的最终产品可能差异很大,所以不大可能提炼出一个抽象产品类。

由于建造者隐藏了具体产品的组装过程,所以要改变一个产品的内部表示,只需要再实现一个具体的建造者就可以了,从而能很好地应对产品组成组件的需求变化。

使用场景: 1、需要生成的对象具有复杂的内部结构。 2、需要生成的对象内部属性本身相互依赖。

优点: 

建造者独立,易扩展。 便于控制细节风险。

建造者模式将复杂对象的创建与客户端进行分离,降低了两者间的耦合度。

其本质上是将复杂对象的创建过程与具体产品表现间的解耦。

缺点: 

产品必须有共同点,范围有限制。

如内部变化复杂,会有很多的建造类。

具体产品:

/// <summary>
/// 电脑类
/// </summary>
public class Computer
{
    private List<string> parts = new List<string>();//电脑组件集合

    public void AddParts(string part)
    {
        parts.Add(part);
    }

    public void Show()
    {
        Debug.Log("电脑配件:");
        foreach (string part in parts)
        {
            Debug.Log("已经组装了:" + part);
        }
    }
}

抽象建造者:

/// <summary>
/// 组装电脑的方案接口
/// </summary>
public interface I_Builder
{
    void Build_MainBoard();//主板

    void Build_CPU();//CPU

    void Build_GPU();//GPU

    /// <summary>
    /// 最后获得一台组装好的电脑,返回一台电脑
    /// </summary>
    Computer GetComputer();

}

具体建造者:

/// <summary>
/// 电脑组装方案1
/// </summary>
public class ConcreteBuilder_1 : I_Builder
{
    Computer computer = new Computer();//新建一台电脑

    public void Build_MainBoard()
    {
        computer.AddParts("组装主板_1");
    }

    public void Build_CPU()
    {
        computer.AddParts("组装CPU_1");
    }

    public void Build_GPU()
    {
        computer.AddParts("组装GPU_1");
    }

    public Computer GetComputer()
    {
        return computer;
    }
}
/// <summary>
/// 电脑组装方案2
/// </summary>
public class ConcreteBuilder_2 : I_Builder
{
    Computer computer = new Computer();//新建一台电脑

    public void Build_MainBoard()
    {
        computer.AddParts("组装主板_2");
    }
    public void Build_CPU()
    {
        computer.AddParts("组装CPU_2");
    }

    public void Build_GPU()
    {
        computer.AddParts("组装GPU_2");
    }

    public Computer GetComputer()
    {
        return computer;
    }

}

指挥者:

/// <summary>
/// 指挥者
/// </summary>
public class Director
{
    /// <summary>
    /// 组装电脑的建造步骤
    /// </summary>
    /// <param name="builder"></param>
    public void Construct(I_Builder builder)
    {
        builder.Build_MainBoard();
        builder.Build_CPU();
        builder.Build_GPU();
    }
}

运行测试:

void Start()
{
	Director director = new Director();//新建指挥者

	I_Builder builder_1 = new ConcreteBuilder_1();//新建方案1
	I_Builder builder_2 = new ConcreteBuilder_2();//新建方案2

	director.Construct(builder_1);//指挥者获取方案1去组装一台电脑
	Computer computer_1 = builder_1.GetComputer();//获得组装好的电脑1
	computer_1.Show();

	Debug.Log("==================================================");

	director.Construct(builder_2);//指挥者获取方案2去组装一台电脑
	Computer computer_2 = builder_2.GetComputer();//获得组装好的电脑2
	computer_2.Show();

}

结果:

猜你喜欢

转载自blog.csdn.net/qq_40346899/article/details/106647781