打字猴:1.70045945e+09
1700459450
1700459451 //按照同样的顺序,我再要一个宝马
1700459452
1700459453 BMWBuilder bmwBuilder=new BMWBuilder();
1700459454
1700459455 bmwBuilder.setSequence(sequence);
1700459456
1700459457 BMWModel bmw=(BMWModel)bmwBuilder.getCarModel();
1700459458
1700459459 bmw.run();
1700459460
1700459461 }
1700459462
1700459463 }
1700459464
1700459465 运行结果如下所示:
1700459466
1700459467 奔驰车的引擎是这个声音的……
1700459468
1700459469 奔驰车跑起来是这个样子的……
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
[ 上一页 ]  [ :1.70045945e+09 ]  [ 下一页 ]