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 ]
[
下一页 ]