一、建造者模式简介
建造者模式(Builder Pattern)原理在于将一个复杂的问题分解为多个细小的问题,每个细小的问题则是一个对象,然后通过这些小对象构建成为复杂问题这个大的对象。也可以理解为这些小对象是一个单独的元器件,我们通过这些元器件进行不同的组合构建成不同且复杂的物体。
在建造者模式中通过一个指挥者来判断客户端需要创建目标类型。
建造者模式的优点:
1、独立的创建每个对象,易于扩展功能
2、局限性强产品必须有共同点
二、建造者模式的实现
1、建造者模式的实现模型
Builder是一个抽象的接口类它涵盖了一个对象的所有组成部分的抽象接口,ConcreteBuilder是一个Builder接口的具体实现类。
product 则是一个使用接口创建出的具体产品。
Director是一个指挥者,它根据客户端的不同需求而创建不同的Product。
建造者模式的代码实现:
using System;
using System.Collections.Generic;
abstract class Builder
{
public abstract void BuiderPatyA ();
public abstract void BuiderPatyB ();
public abstract Product GetResult ();
}
class Product
{
IList<string> parts = new List<string> ();
public void Add(string part)
{
parts.Add (part);
}
public void Show()
{
foreach(string part in parts)
{
Console.WriteLine (parts);
}
}
}
class ConcreteBuilder1 :Builder
{
private Product part = new Product ();
public override void BuiderPatyA ()
{
Console.WriteLine ("SHI XIAN LE FANG AN A");
}
public override void BuiderPatyB ()
{
Console.WriteLine ("SHI XIAN LE FANG AN B");
}
public override Product GetResult ()
{
return part;
}
}
class ConcreteBuilder2 :Builder
{
private Product part = new Product ();
public override void BuiderPatyA ()
{
Console.WriteLine ("SHI XIAN LE FANG AN X");
}
public override void BuiderPatyB ()
{
Console.WriteLine ("SHI XIAN LE FAGN AN Y");
}
public override Product GetResult ()
{
return part;
}
}
class Director
{
public void Construct(Builder buider)
{
buider.BuiderPatyA ();
buider.BuiderPatyB ();
}
}
class WinMain
{
public static void Main(string[] args)
{
Director director = new Director ();
Builder b1 = new ConcreteBuilder1 ();
Builder b2 = new ConcreteBuilder2 ();
director.Construct (b1);
Product patrA = b1.GetResult ();
patrA.Show ();
director.Construct (b2);
Product patrB = b2.GetResult ();
patrA.Show ();
Console.ReadKey ();
}
}
运行结果: