Builder Pattern
BuilderPattern是创建对象的模式,它和工厂不同的是:工厂是直接返回一个对象,这个对象已经完全生成好;但是创建者模式,是创建者一步步按照先定步骤来生成这个对象。其实,2者的区别真的很小很小。
下面是一个Builder模式最基本的例子:
public interface IBuilder { void BuildPartA(); void BuildPartB(); Product GetProduct(); } public class Builder:IBuilder { Product m_product = new Product(); #region IBuilder Members public void BuildPartA() { m_product.Add("A"); } public void BuildPartB() { m_product.Add("B"); } public Product GetProduct() { return m_product; } #endregion } public class BuilderFactory<T> where T:IBuilder { public void CreateProduct(T build) { build.BuildPartA(); build.BuildPartB(); } }
这里的重点是builderFactory,很明显的可以看见他是一步步的创建出这个对象,然后,我们直接调用builder的GetProduct就得到了这个对象。
Builder builder = newBuilder();
BuilderFactory<Builder> factory = newBuilderFactory<Builder>();
factory.CreateProduct(builder);
builder.GetProduct().Display();
这里的Factory是直接利用一个已经确定好的Builder来建造Product对象,那么我们可以变通一下,也就是可以利用外部其他对象来决定使用那个builder来创建Product对象,那么我们新的BuilderFactory如下:
public class NewBuilderFactory { IBuilder builder = null; public IBuilder CreateProduct(int count) { if (count < 3) { builder = new Builder(); builder.BuildPartA(); builder.BuildPartB(); } else { //builder = new OtherBuilder() //builder.BuildPartA(); //builder.BuildPartB(); } return builder; } }这样,是不是更接近于一个工厂模式了,呵呵。