打字猴:1.70045947e+09
1700459470
1700459471 奔驰车应该这样停车……
1700459472
1700459473 宝马车的引擎是这个声音的……
1700459474
1700459475 宝马车跑起来是这个样子的……
1700459476
1700459477 宝马车应该这样停车……
1700459478
1700459479 看,同样运行顺序的宝马车也生产出来了,而且代码是不是比刚开始直接访问产品类(Procuct)简单了很多。我们在做项目时,经常会有一个共识:需求是无底洞,是无理性的,不可能你告诉它不增加需求就不增加,这4个过程(start、stop、alarm、engineBoom)按照排列组合有很多种,XX公司可以随意组合,它要什么顺序的车模我就必须生成什么顺序的车模,客户可是上帝!那我们不可能预知他们要什么顺序的模型呀,怎么办?封装一下,找一个导演,指挥各个事件的先后顺序,然后为每种顺序指定一个代码,你说一种我们立刻就给你生产处理,好方法,厉害!我们先修改一下类图,如图11-3所示。
1700459480
1700459481
1700459482
1700459483
1700459484 图11-3 完整汽车模型类图
1700459485
1700459486 类图看着复杂了,但还是比较简单,我们增加了一个Director类,负责按照指定的顺序生产模型,其中方法说明如下:
1700459487
1700459488 ❑getABenzModel方法
1700459489
1700459490 组建出A型号的奔驰车辆模型,其过程为只有启动(start)、停止(stop)方法,其他的引擎声音、喇叭都没有。
1700459491
1700459492 ❑getBBenzModel方法
1700459493
1700459494 组建出B型号的奔驰车,其过程为先发动引擎(engine boom),然后启动,再然后停车,没有喇叭。
1700459495
1700459496 ❑getCBMWModel方法
1700459497
1700459498 组建出C型号的宝马车,其过程为先喇叭叫一下(alarm),然后启动,再然后是停车,引擎不轰鸣。
1700459499
1700459500 ❑getDBMWModel方法
1700459501
1700459502 组建出D型号的宝马车,其过程就一个启动,然后一路跑到黑,永动机,没有停止方法,没有喇叭,没有引擎轰鸣。
1700459503
1700459504 其他的E型号、F型号……可以有很多,启动、停止、喇叭、引擎轰鸣这4个方法在这个类中可以随意的自由组合。Director类如代码清单11-10所示。
1700459505
1700459506 代码清单11-10 导演类
1700459507
1700459508 public class Director{
1700459509
1700459510 private ArrayList<String>sequence=new ArrayList();
1700459511
1700459512 private BenzBuilder benzBuilder=new BenzBuilder();
1700459513
1700459514 private BMWBuilder bmwBuilder=new BMWBuilder();
1700459515
1700459516 /*
1700459517
1700459518 *A类型的奔驰车模型,先start,然后stop,其他什么引擎了,喇叭一概没有
1700459519
[ 上一页 ]  [ :1.70045947e+09 ]  [ 下一页 ]