1700476404
}
1700476405
1700476406
怎么回事?在第11章中讲解建造者模式的时候在产品中使用了模板方法模式,在这里怎么把模板方法模式迁移到建造者了?怎么会这样?你是不是在发出这样的疑问?别疑问了!设计模式只是提供了一个解决问题的意图:复杂对象的构建与它的表示分离,而没有具体定出一个设计模式必须是这样的实现,必须是这样的代码,灵活运用模式才是其根本,别学死板了。
1700476407
1700476408
我们继续看未成年超人的建造者,如代码清单30-9所示。
1700476409
1700476410
代码清单30-9 未成年超人建造者
1700476411
1700476412
public class ChildSuperManBuilder extends Builder{
1700476413
1700476414
@Override
1700476415
1700476416
public SuperMan getSuperMan(){
1700476417
1700476418
super.setBody(“强壮的躯体”);
1700476419
1700476420
super.setSpecialTalent(“刀枪不入”);
1700476421
1700476422
super.setSpecialSymbol(“胸前带小S标记”);
1700476423
1700476424
return super.superMan;
1700476425
1700476426
}
1700476427
1700476428
}
1700476429
1700476430
大家注意看我们这两个具体的建造者,它们都关注了产品的各个部分,在某些应用场景下甚至会关心产品的构建顺序,即使是相同的部件,装配顺序不同,产生的结果也不同,这也正是建造者模式的意图:通过不同的部件、不同装配产生不同的复杂对象。我们再来看导演类,如代码清单30-10所示。
1700476431
1700476432
代码清单30-10 导演类
1700476433
1700476434
public class Director{
1700476435
1700476436
//两个建造者的应用
1700476437
1700476438
private static Builder adultBuilder=new AdultSuperManBuilder();
1700476439
1700476440
//未成年超人的建造者
1700476441
1700476442
private static Builder childBuilder=new ChildSuperManBuilder();
1700476443
1700476444
//建造一个成年、会飞行的超人
1700476445
1700476446
public static SuperMan getAdultSuperMan(){
1700476447
1700476448
return adultBuilder.getSuperMan();
1700476449
1700476450
}
1700476451
1700476452
//建造一个未成年、刀枪不入的超人
1700476453
[
上一页 ]
[ :1.700476404e+09 ]
[
下一页 ]