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) 收藏 举报
浙公网安备 33010602011771号