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;

    }

}
这样,是不是更接近于一个工厂模式了,呵呵。

你可能感兴趣的:(Pattern)