读书人

探索设计形式之四建造者模式

发布时间: 2012-11-10 10:48:50 作者: rapoo

探索设计模式之四——建造者模式

?

4.建造者模式(Builder Pattern)


?图4.1 战斗部队及建造者的UML图

/** * Builder的产品,代表一组骚扰部队 */public class ZergProduct { private int overload; private int zergling; private int hydralisk; private int lurker; public int getOverload() { return overload; } public void setOverload(int overload) { this.overload = overload; } public int getZergling() { return zergling; } public void setZergling(int zergling) { this.zergling = zergling; } public int getHydralisk() { return hydralisk; } public void setHydralisk(int hydralisk) { this.hydralisk = hydralisk; } public int getLurker() { return lurker; } public void setLurker(int lurker) { this.lurker = lurker; } public String toString() { return "当前部队包括:" + overload + "个Overload; " + zergling + "个Zergling; " + hydralisk + "个Hydralisk; " + lurker + "个Lurker"; }}?

/** * 适应场景A的装配器 */public class SceneABuilder implements ArmyBuilder { ZergProduct product = new ZergProduct(); public void buildHydralisk() { product.setHydralisk(1); } public void buildLurker() { product.setLurker(1); } public void buildOberload() { product.setOverload(1); } public void buildZergling() { product.setZergling(2); } public ZergProduct getResult() { ZergProduct finlishProduct = product; product = new ZergProduct(); return finlishProduct; }} /** * 适应场景B的装配器 */public class SceneBBuilder implements ArmyBuilder { ZergProduct product = new ZergProduct(); public void buildHydralisk() { product.setHydralisk(4); } public void buildLurker() { product.setLurker(0); } public void buildOberload() { product.setOverload(0); } public void buildZergling() { product.setZergling(0); } public ZergProduct getResult() { ZergProduct finlishProduct = product; product = new ZergProduct(); return finlishProduct; }}?

/** * 描述建造者的建造过程 */public class Director { public void construct(ArmyBuilder builder) { builder.buildOberload(); builder.buildHydralisk(); builder.buildZergling(); builder.buildLurker(); }}?

/** * 模拟建造两只部队 */public class WarField { public static void main(String[] args) { Director director = new Director(); ArmyBuilder builderA = new SceneABuilder(); ArmyBuilder builderB = new SceneBBuilder(); director.construct(builderA); director.construct(builderB); System.out.println(builderA.getResult()); System.out.println(builderB.getResult()); }}?


?图 4.2 两种兵种组合

从本章开始介绍的三种Factory模式以外的构造模式,也让Zerg的发展正式走进了我们的剧情之中,现在让我们一起看看Zerg中一些很神奇部队生产方式,去学习下一种构造模式。

1 楼 IcyFenix 2010-01-19 PDF下载见附件,《设计模式探索——星际争霸探险之旅》其他章节请见我博客:
http://icyfenix.iteye.com 2 楼 sbpya 2010-04-30 确实,学习模式关键的地方就在于如何恰当地运用到系统中去,而不能为了模式而模式。 3 楼 macemers 2011-08-29 PDF附件在哪里?

读书人网 >软件开发

热点推荐