建造者模式
建造者模式属于创建型模式,将部件本身和它们的组装过程分开,用户只需要指定复杂对象的类型即可得到该对象,而无需知道其内部的具体构造细节。
建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
建造者模式包含以下4个角色:
1.Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽象接口,一般声明两个方法,BuildPart X()用于创建复杂对象的各个部件,GetResult()方法用于返回复杂对象,Builder既可以是抽象类也可以是接口
2.ConcreteBuilder(具体建造者):实现Builder接口,实现各个部件的具体构造和装配方法,
3.Product(产品):它是被构建的复杂对象,包含多个组成部件。
4.Director(指挥者):负责安排复杂对象的建造次序,指挥者与抽象建造者之间存在关联关系,可以在其Construct()建造方法调用建造者对象的部件构造与装配方法,完成复杂对象的建造
废话少说,直接上代码,看代码直接学的快,所以请记住一定要上手,自己动手写代码
复杂对象是指包含多个成员变量的对象,这些成员对象也称为部件或零件。
典型的复杂对象类:
class Product
{
private string partA; //定义部件,部件可以是任意类型,包括值类型和引用类型
private string partB;
private string partC;
public string PartA
{
get{return partA;}
set{partA = value;}
}
public string PartB
{
get{return partB;}
set{partB = value;}
}
public string PartC
{
get{return partC;}
set{partC = value;}
}
}
在抽象建造者类中定义了产品的创建方法和返回方法。
抽象建造者类
abstract class Builder
{
protected Product product = new Product(); //创建产品对象
public abstract void BuilderPartA(); //定义方法用于创建复杂对象各个部件
public abstract void BuilderPartB();
public abstract void BuilderPartC();
public Prodcut GetResult()
{
return product;
}
}
实现抽象建造类的接口具体实现。
具体建造者类:
class ConcreteBuilder1:Builder
{
public override void BuilderPartA()
{
product.PartA = "A1";
}
public override void BuilderPartB()
{
product.PartB = "B1";
}
public override void BuilderPartC()
{
product.PartC = "C1";
}
}
Director类,一来隔离了客户端与创建过程,二来控制了产品对象的创建过程,包括是否调用方法,以及它们的调用的先后次序,还提供了一个建造方法Construct(),调用了builder对象的构造部件的方法,最后返回一个产品对象。
指挥者类:
class Director
{
private Builder builder;
public Director(Builder builder)
{
this.builder = builder;
}
public void SetBuilder(Builder builder)
{
this.builder = builder;
}
public Product Construct() //产品构建与组装方法
{
builder.BuilderPartA();
builder.BuilderPartB();
builder.BuilderPartC();
return builder.GetResult();
}
}
对于客户端而讲,只需要关心具体建造者的类型,而须关心产品对象的具体组装过程。
客户端实现:
...
Builder builder = new ConcreteBuilder1();
Director dierctor = new Director(builder);
Product product = dirctor.Construct();
...