一. 建造者模式
建造者模式,是将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示。
优点:
使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以如果要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。
适用场合:
主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但是对象内部的构建通常面临着复杂的变化。
二.建造者模式的结构
product类:具体的产品
Director类:指挥者,构建一个使用Builder接口的对象。
Builder接口:是为创建一个product对象的各个组件指定的抽象接口。
ConcreteBuilder类:具体的建造者,实现Builder接口,构造和装配各个部
1.代码实现


1.具体产品product
#region 具体产品Product
/// <summary>
/// 具体产品Product
/// </summary>
public class Product
{
private IList<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("产品完成创建!");
}
}
#endregion
#region 具体产品Product
/// <summary>
/// 具体产品Product
/// </summary>
public class Product
{
private IList<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("产品完成创建!");
}
}
#endregion
2、抽象建造者Builder及其具体建造者ConcreteBuilder1,ConcreteBuilder2


#region 抽象建造者Builder及其具体建造者ConcreteBuilder1,ConcreteBuilder2
/// <summary>
/// 抽象建造者Builder
/// </summary>
public abstract class Builder
{
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product GetResult();
}
/// <summary>
/// 具体建造者ConcreteBuilder1
/// </summary>
public class ConcreteBuilder1 : Builder
{
Product product = new Product();
public override void BuildPartA()
{
product.Add("A1");
}
public override void BuildPartB()
{
product.Add("B1");
}
public override Product GetResult()
{
return product;
}
}
/// <summary>
/// 具体建造者ConcreteBuilder2
/// </summary>
public class ConCreteBuilder2 : Builder
{
Product product = new Product();
public override void BuildPartA()
{
product.Add("A2");
}
public override void BuildPartB()
{
product.Add("B2");
}
public override Product GetResult()
{
return product;
}
}
#endregion
/// <summary>
/// 抽象建造者Builder
/// </summary>
public abstract class Builder
{
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product GetResult();
}
/// <summary>
/// 具体建造者ConcreteBuilder1
/// </summary>
public class ConcreteBuilder1 : Builder
{
Product product = new Product();
public override void BuildPartA()
{
product.Add("A1");
}
public override void BuildPartB()
{
product.Add("B1");
}
public override Product GetResult()
{
return product;
}
}
/// <summary>
/// 具体建造者ConcreteBuilder2
/// </summary>
public class ConCreteBuilder2 : Builder
{
Product product = new Product();
public override void BuildPartA()
{
product.Add("A2");
}
public override void BuildPartB()
{
product.Add("B2");
}
public override Product GetResult()
{
return product;
}
}
#endregion
3、指挥者类Director
![]() ![]() #region 指挥构建过程 /// <summary> /// 指挥构建过程 /// </summary> public class Director { public void Construct(Builder builder) { builder.BuildPartA(); builder.BuildPartB(); } } #endregion
4客户端代码
![]() ![]() static void Main(string[] args) { Director director = new Director(); Builder builder1 = new ConcreteBuilder1(); Builder builder2 = new ConCreteBuilder2(); director.Construct(builder1); Product product1 = builder1.GetResult(); product1.Show(); director.Construct(builder2); Product product2 = builder2.GetResult(); product2.Show(); Console.Read(); }
5. 运行结果
|