1、为什么要使用建造者模式?
抽象工厂模式中可以生产一系列相关的产品,我们利用抽象工厂模式获取了很多个对象,但是当我们想生产一个由多个部分组成的复杂对象时,也就是说我们只获取一个产品对象,但是这个产品如何构造的客户端不需要知道,这种情况下就需要使用建造者模式,建造者模式中,抽象建造者类定义生产产品各个部分的方法,具体建造者类负责实现,指挥者类负责定义生产各个部分的顺序,代码如下:
产品类定义了生产这个产品的各个部分的属性
class Product
{
public string PartA { get; set; }
public string PartB { get; set; }
public string PartC { get; set; }
}
抽象建造者类定义了一个产品对象,定义产品部件的方法、返回产品对象的方法,因为我们需要在具体建造者实现了抽象建造者类中定义的方法之后,返回这个被改变的产品对象(具体建造者类中改变了产品对象)。
abstract class AbstractBuilder
{
public Product product = new Product();
public abstract void CreatePartA();
public abstract void CreatePartB();
public abstract void CreatePartC();
public Product CreateProduct()
{
return product;
}
}
具体建造者类,定义如何创建产品的各个部分
class ConcreteBuilder:AbstractBuilder
{
public override void CreatePartA()
{
product.PartA = "PARTA";
}
public override void CreatePartB()
{
product.PartB = "PARTB";
}
public override void CreatePartC()
{
product.PartC = "PARTC";
}
}
指挥者类,指定产品各个部分的建造顺序。
class Director
{
public Product ConstructProduct(AbstractBuilder ab)
{
ab.CreatePartA();
ab.CreatePartB();
ab.CreatePartC();
return ab.CreateProduct();
}
}
客户端调用类,最终获取经过具体建造者类改造的复杂产品对象。
public Form1()
{
InitializeComponent();
AbstractBuilder ab = new ConcreteBuilder();
Director dir = new Director();
Product product = dir.ConstructProduct(ab);
}