打字猴:1.70045927e+09
1700459270 ArrayList<String>sequence=new ArrayList<String>();
1700459271
1700459272 sequence.add(“engine boom”);//客户要求,run的时候时候先发动引擎
1700459273
1700459274 sequence.add(“start”);//启动起来
1700459275
1700459276 sequence.add(“stop”);//开了一段就停下来
1700459277
1700459278 //我们把这个顺序赋予奔驰车
1700459279
1700459280 benz.setSequence(sequence);
1700459281
1700459282 benz.run();
1700459283
1700459284 }
1700459285
1700459286 }
1700459287
1700459288 运行结果如下所示:
1700459289
1700459290 奔驰车的引擎是这个声音的……
1700459291
1700459292 奔驰车跑起来是这个样子的……
1700459293
1700459294 奔驰车应该这样停车……
1700459295
1700459296 看,我们组装了这样的一辆汽车,满足了XX公司的需求。但是想想我们的需求,汽车的动作执行顺序是要能够随意调整的。我们只满足了一个需求,还要下一个需求呀,然后是第二个宝马模型,只要启动、停止,其他的什么都不要;第三个模型,先喇叭,然后启动,然后停止;第四个……直到把你逼疯为止,那怎么办?我们就一个一个地来写场景类满足吗?不可能了,那我们要想办法来解决这个问题,有了!我们为每种模型产品模型定义一个建造者,你要啥顺序直接告诉建造者,由建造者来建造,于是乎我们就有了如图11-2所示的类图。
1700459297
1700459298
1700459299
1700459300
1700459301 图11-2 增加了建造者的汽车模型类图
1700459302
1700459303 增加了一个CarBuilder抽象类,由它来组装各个车模,要什么类型什么顺序的车辆模型,都由相关的子类完成。首先编写CarBuilder代码,如代码清单11-5所示。
1700459304
1700459305 代码清单11-5 抽象汽车组装者
1700459306
1700459307 public abstract class CarBuilder{
1700459308
1700459309 //建造一个模型,你要给我一个顺序要,就是组装顺序
1700459310
1700459311 public abstract void setSequence(ArrayList<String>sequence);
1700459312
1700459313 //设置完毕顺序后,就可以直接拿到这个车辆模型
1700459314
1700459315 public abstract CarModel getCarModel();
1700459316
1700459317 }
1700459318
1700459319 很简单,每个车辆模型都要有确定的运行顺序,然后才能返回一个车辆模型。奔驰车的组装者如代码清单11-6所示。
[ 上一页 ]  [ :1.70045927e+09 ]  [ 下一页 ]