建造者模式:可以将一个产品的内部表现与产品的生成过程分割开来。从而可以使一个建造过程具有不同的内部表现的产品对象。如果我们用了建造者模式,那么用户就只需指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需要知道了
namespace 建造者模式
{
class Program
{
static void Main(string[] args)
{
//创建指挥者
Director director = new Director();
//创建部件AB类
Builder b1 = new ConcreteBuilder1();
//创建部件XY类
Builder b2 = new ConcreteBuilder2();
//增加AB部件
director.Construct(b1);
Product p1 = b1.GetResult();
//进行展示
p1.Show();
//增加XY部件
director.Construct(b2);
Product p2 = b2.GetResult();
//进行展示
p2.Show();
Console.Read();
}
}
/// <summary>
/// 指挥者
/// </summary>
class Director
{
/// <summary>
/// 用来指挥建造过程
/// </summary>
/// <param name="builder"></param>
public void Construct(Builder builder)
{
//建造AB部件
builder.BuildPartA();
//建造XY部件
builder.BuildPartB();
}
}
/// <summary>
/// 抽象建造者
/// </summary>
abstract class Builder
{
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product GetResult();
}
/// <summary>
/// 具体建造类1
/// </summary>
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;
}
}
/// <summary>
/// 具体建造类2
/// </summary>
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;
}
}
/// <summary>
/// 产品类
/// </summary>
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);
}
}
}
}
浙公网安备 33010602011771号