Design Pattern--Builder Pattern

一、Builder pattern 适用场景

Builder pattern 适用在应对 “复杂对象各个部分” 的频繁需求变化,但是分步骤构建算法的需求是稳定的。Abstract Factory pattern 应对的是 “系列对象” 的需求变化,Builder 解决的是 “部分对象” 的需求变化。

二、结构

三、代码

抽象builder类

public abstract class AbstractBuilder
    {
        abstract public void BuildWindow();
        abstract public void BuildDoor();
        abstract public void BuildCeiling();

        abstract public Product GetResult();
    }

具体builder 类

 public class ClassicProductBuilder: AbstractBuilder
    {
        private Product product;

        public ClassicProductBuilder()
        {
            product = new Product();
        }
        public override void BuildWindow()
        {
            product.AddPart("BuildClassicWindow");
        }

        public override void BuildDoor()
        {
            product.AddPart("BuildClassicDoor");
        }

        public override void BuildCeiling()
        {
            product.AddPart("BuildClassicCeiling");
}
public override Product GetResult() { return product; } }

具体builder类

public class ModernProductBuilder : AbstractBuilder
    {
        private Product product;

        public ModernProductBuilder()
        {
            product = new Product();
        }
        public override void BuildWindow()
        {
            product.AddPart("BuildModernWindow");
        }

        public override void BuildDoor()
        {
            product.AddPart("BuildModernDoor");
        }

        public override void BuildCeiling()
        {
            product.AddPart("BuildModernCeiling");
        }

        public override Product GetResult()
        {
            return product;
        }

Builder manager 类

public class BuilderManager
    {
        //This part is stable, does not change a lot
        public Product GetProducts(AbstractBuilder builder)
        {
            builder.BuildDoor();
            builder.BuildWindow();
            builder.BuildCeiling();

            return builder.GetResult();
        }
    }

Main 测试类

 [STAThread]
        static void Main(string[] args)
        {
            BuilderManager builderManager = new BuilderManager();
            Product proClassic = builderManager.GetProducts(new ClassicProductBuilder());
            proClassic.ShowResult();

            Product proModern = builderManager.GetProducts(new ModernProductBuilder());
            proModern.ShowResult();
            Console.ReadLine();
        }

运行结果:

四、总结:

1)代码示例的是基础builder pattern结构,可以根据需求,将product的各个组成部分也抽象出来,从而可以适应类型更为丰富的部分对象。

2)在客户程序中,可以进一步的利用反射从配置文件中得到需要builder的具体类,动态的build需要的产品。

 

posted on 2014-04-24 16:24  feifeiyu7777  阅读(150)  评论(0)    收藏  举报

导航