某赛车游戏,玩家能够选择不一样的车,这些车实际上是采用不一样性能的配件组成的,如:车胎、发动机等。
玩家选择一部车,其实就是new了一部车。
你如何考虑“new car”的代码?
要new这个车,可能须要先new出车的各个配件,而后将这些配件组合成car。
某些复杂对象要new出来时,每每须要先new出它的子对象,而后组装成进父对象中,这些子对象有时候甚至组成了“树”结构。
生成器模式就是用来解决这问题的。
赛车游戏用生成器的解决方案:
CAR_Builder定义了增长车组件的几个方法,还有CreateCar()方法。
BenZ_Builder类是具体生产奔驰车的类,该类集成了CAR_Builder,而且根据须要编写了生产奔驰车的特有代码。
同理,Ferrari_Builder是用来生产法拉利的,若是想增长更多的车品种,再增长一个类继承CAR_Builder即可。
生成器的 类图:
设计模式
直接看此图会有点难以理解,请先理解上面的例子。
抽象类Builder的责任是创建各组件,CreateComponent()方法不必定只有一个的,可根据须要添加多个。
创建出来的组件多是树形结构,Component与Leaf的关系就是表示这个意思。
各组件最终须要组合在一块儿,最终咱们须要有一个相似CreateCar()的方法来获得这个包含各组件的父对象。性能
做者:张传波ui
创新工场创业课堂(敏捷课程)讲师spa
软件研发管理资深顾问设计
CMMI首席专家对象
《火球——UML大战需求分析》做者blog
《硬啃设计模式》做者继承
www.umlonline.org创办人
游戏