2.5 《硬啃设计模式》第7章 车手选车 - 生成器(Builder Pattern)

来源:互联网 发布:经济统计数据库 编辑:程序博客网 时间:2024/04/28 11:37
某赛车游戏,玩家可以选择不同的车,这些车其实是采用不同性能的配件组成的,如:车胎、发动机等。
玩家选择一部车,其实就是new了一部车。
你如何考虑“new car”的代码?

要new这个车,可能需要先new出车的各个配件,然后将这些配件组合成car。
某些复杂对象要new出来时,往往需要先new出它的子对象,然后组装成进父对象中,这些子对象有时候甚至组成了“树”结构。
生成器模式就是用来解决这问题的。

赛车游戏用生成器的解决方案:

 生成器1.png

CAR_Builder定义了增加车组件的几个方法,还有CreateCar()方法。
BenZ_Builder类是具体生产奔驰车的类,该类集成了CAR_Builder,并且根据需要编写了生产奔驰车的特有代码。
同理,Ferrari_Builder是用来生产法拉利的,如果想增加更多的车品种,再增加一个类继承CAR_Builder便可。

生成器的类图

 生成器2.png



直接看此图会有点难以理解,请先理解上面的例子。
抽象类Builder的责任是建立各组件,CreateComponent()方法不一定只有一个的,可根据需要添加多个。
建立出来的组件可能是树形结构,Component与Leaf的关系就是表示这个意思。
各组件最终需要组合在一起,最终我们需要有一个类似CreateCar()的方法来得到这个包含各组件的父对象。

 

 


 

请看下一文……
 
 
 

作者:张传波

创新工场创业课堂(敏捷课程)讲师

软件研发管理资深顾问

CMMI首席专家

《火球——UML大战需求分析》作者

《硬啃设计模式》作者

www.umlonline.org创办人