llopx

能跟您分享知识,是我的荣幸

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;
    }
}
这样,是不是更接近于一个工厂模式了,呵呵。

posted on 2009-12-15 21:18  llopx  阅读(168)  评论(0编辑  收藏  举报

导航