一、建造者模式(Builder)
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
二、建造者模式UML图
(1)Builder:为创建一个Product对象的各个部件指定的抽象接口
(2)ConcreteBuilder:具体建造者,实现Builder接口,构造和装配各个部件
(3)Product:构建出来的具体产品
(4)Director:指挥者,直接与用户沟通,根据用户的需求构建产品
三、代码实现
Product类————产品类,由多个部件组成
class Product
{
IList<string> parts = new List<string>();
public void Add(string part) //添加产品部件
{
parts.Add(part);
}
public void Show()
{
Console.WriteLine("\n产品 创建----");
foreach (string part in parts) //例举所有产品部件
{
Console.WriteLine(part);
}
}
}
Builder类————抽象建造者类,确定产品由两个部件PartA和PartB组成,并声明一个得到产品建造后结果的方法GetResult
abstract class Builder
{
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product GetResult();
}
ConcreteBuilder1类————具体建造者类
class ConcreteBuilder1 : Builder
{
private Product product = new Product();
public override void BuildPartA()
{
product.Add("部件A");
}
public override void BuildPartB()
{
product.Add("部件B");
}
public override Product GetResult()
{
return product;
}
}
ConcreteBuilder2类————具体建造者类
class ConcreteBuilder2 : Builder
{
private Product product = new Product();
public override void BuildPartA()
{
product.Add("部件X");
}
public override void BuildPartB()
{
product.Add("部件Y");
}
public override Product GetResult()
{
return product;
}
}
Director类————指挥者类
class Director
{
public void Construct(Builder buider)
{
buider.BuildPartA();
buider.BuildPartB();
}
}
客户端代码
class Program
{
static void Main(string[] args)
{
Director direcotr = new Director();
Builder b1 = new ConcreteBuilder1();
Builder b2 = new ConcreteBuilder2();
direcotr.Construct(b1);
Product P1 = b1.GetResult();
P1.Show();
direcotr.Construct(b2);
Product P2 = b2.GetResult();
P2.Show();
Console.Read();
}
}