1.产品类Product
2.抽象建造者类Builder
3.具体建造者类ConcreteBuilder(继承自Builder,包含产品变量和一系列对产品操作的方法)
4.指挥者类Director(指挥建造提高便利性,真正调用具体建造者用方法的地方)
使用:
Director director=new Director();
Builder builder =new ConcreteBuilder();
director.Construct(builder);//该处调用一系列具体建造者中的建造方法
builder.GetResult();
简述:对于一系列的操作的封装和隔离(主要是创建复杂对象),使用director来进行处理,举例如肯德基产品的制造,为何可以保证全国各门店的相同产品的味道几乎一致,因为他们有严格的产品制造流程
/// <summary>
/// 肯德基产品制作接口
/// </summary>
public interface IProduct
{
void AddSalt();
void AddFlour();
void AddMeat();
void Make();
}
/// <summary>
/// 具体的产品-汉堡包
/// </summary>
public class ProductHamburger : IProduct
{
public string _productName;
public ProductHamburger(string productname)
{
_productName = productname;
}
public void AddFlour()
{
Console.WriteLine("汉堡加面粉");
}
public void AddMeat()
{
Console.WriteLine("汉堡加肉");
}
public void AddSalt()
{
Console.WriteLine("汉堡加调料");
}
public void Make()
{
Console.WriteLine("制作汉堡");
}
}
/// <summary>
/// 真正的制作人-店员
/// </summary>
public class KFCDirector
{
private IProduct pd;
public KFCDirector(IProduct pd)
{
this.pd = pd;
}
public void MakeProduct()
{
pd.AddFlour();
pd.AddMeat();
pd.AddSalt();
pd.Make();
}
}
class Program
{
static void Main(string[] args)
{
//定义一个产品
IProduct product = new ProductHamburger("汉堡包");
//定义一个店员
KFCDirector kFC = new KFCDirector(product);
//制作产品
kFC.MakeProduct();
Console.ReadLine();
}
}
如此操作可以确保任何一个产品的参数基本保持一致,如果有新的产品只要添加新的产品类就可以