2.5 《硬啃设计模式》第7章 车手选车 - 生成器(Builder Pattern)
来源:互联网 发布:经济统计数据库 编辑:程序博客网 时间:2024/04/28 11:37
某赛车游戏,玩家可以选择不同的车,这些车其实是采用不同性能的配件组成的,如:车胎、发动机等。
玩家选择一部车,其实就是new了一部车。
你如何考虑“new car”的代码?
要new这个车,可能需要先new出车的各个配件,然后将这些配件组合成car。
某些复杂对象要new出来时,往往需要先new出它的子对象,然后组装成进父对象中,这些子对象有时候甚至组成了“树”结构。
生成器模式就是用来解决这问题的。
赛车游戏用生成器的解决方案:
CAR_Builder定义了增加车组件的几个方法,还有CreateCar()方法。
BenZ_Builder类是具体生产奔驰车的类,该类集成了CAR_Builder,并且根据需要编写了生产奔驰车的特有代码。
同理,Ferrari_Builder是用来生产法拉利的,如果想增加更多的车品种,再增加一个类继承CAR_Builder便可。
生成器的类图:
玩家选择一部车,其实就是new了一部车。
你如何考虑“new car”的代码?
要new这个车,可能需要先new出车的各个配件,然后将这些配件组合成car。
某些复杂对象要new出来时,往往需要先new出它的子对象,然后组装成进父对象中,这些子对象有时候甚至组成了“树”结构。
生成器模式就是用来解决这问题的。
赛车游戏用生成器的解决方案:
CAR_Builder定义了增加车组件的几个方法,还有CreateCar()方法。
BenZ_Builder类是具体生产奔驰车的类,该类集成了CAR_Builder,并且根据需要编写了生产奔驰车的特有代码。
同理,Ferrari_Builder是用来生产法拉利的,如果想增加更多的车品种,再增加一个类继承CAR_Builder便可。
生成器的类图:
直接看此图会有点难以理解,请先理解上面的例子。
抽象类Builder的责任是建立各组件,CreateComponent()方法不一定只有一个的,可根据需要添加多个。
建立出来的组件可能是树形结构,Component与Leaf的关系就是表示这个意思。
各组件最终需要组合在一起,最终我们需要有一个类似CreateCar()的方法来得到这个包含各组件的父对象。
请看下一文……
作者:张传波
创新工场创业课堂(敏捷课程)讲师
软件研发管理资深顾问
CMMI首席专家
《火球——UML大战需求分析》作者
《硬啃设计模式》作者
www.umlonline.org创办人
- 2.5 《硬啃设计模式》第7章 车手选车 - 生成器(Builder Pattern)
- 生成器设计模式(Builder Design Pattern)
- 生成器模式(Builder Pattern)
- 生成器模式 Builder Pattern
- 4.2 《硬啃设计模式》 第19章 设计你的战士 - 策略模式(Strategy Pattern)
- 2.6 《硬啃设计模式》第8章 复制不是很难 - 原型模式(Prototype Pattern)
- 3.1 《硬啃设计模式》第10章 麻烦的日志记录 - 桥模式(Bridge Pattern)
- 3.3 《硬啃设计模式》第12章 超级手机 - 外观模式(Facade Pattern)
- 3.5 《硬啃设计模式》 第14章 超酷绘图软件 - 组合模式(Composite Pattern)
- 3.6 《硬啃设计模式》 第15章 超级文档编辑器 - 代理模式(Proxy Pattern)
- 4.1 《硬啃设计模式》 第18章 同步更新的问题 - 观察者模式(Observer Pattern)
- 4.3 《硬啃设计模式》 第20章 集合访问的烦恼 - 迭代器模式(Iterator Pattern)
- 4.5 《硬啃设计模式》 第22章 增加新方法的烦恼 - 访问者模式(Visitor Pattern)
- 4.10 《硬啃设计模式》 第27章 是攻击还是逃走?- 状态模式(State Pattern)
- 《硬啃设计模式》 第26章 万能排序 - 模板方法模式(Template Method Pattern)
- C#设计模式——生成器模式(Builder Pattern)
- 设计模式(三)之生成器模式(Builder Pattern)
- 设计模式——生成器模式(Builder Pattern)
- 使用Spring框架的12个开源项目
- android静默安装apk已经成功实现
- bzoj 1036 树的统计Count 点权值模板
- 随记笔记
- ROS的学习(七)ROS的话题
- 2.5 《硬啃设计模式》第7章 车手选车 - 生成器(Builder Pattern)
- Strict Weak Ordering
- uva 10304 Optimal Binary Search Tree(区间dp)
- 等待线程结束的高手--WaitForSingleObject
- 一个小时内学习SQLite数据库
- php 著名cms框架源码
- (图解版)SQL Server数据库备份与还原
- 经典ID3算法
- Goods类