打字猴:1.700477044e+09
1700477044 System.out.println(”\n===制造一辆混合车===”);
1700477045
1700477046 ICar complexCar=director.createComplexCar();
1700477047
1700477048 System.out.println(complexCar);
1700477049
1700477050 }
1700477051
1700477052 }
1700477053
1700477054 场景类只要找到导演类(也就是车间主任了)说给我制造一辆这样的宝马车,车间主任马上通晓你的意图,设计了一个蓝图,然后命令建造车间拼命加班加点建造,最终返回给你一件最新出品的产品,运行结果如下所示:
1700477055
1700477056 ===制造一辆奔驰SUV===
1700477057
1700477058 获得生产蓝图
1700477059
1700477060 车的轮子是:benz的轮胎
1700477061
1700477062 车的引擎是:benz的引擎
1700477063
1700477064 ===制造一辆宝马商务车===
1700477065
1700477066 获得生产蓝图
1700477067
1700477068 车的轮子是:BMW的轮胎
1700477069
1700477070 车的引擎是:BMW的引擎
1700477071
1700477072 ===制造一辆混合车===
1700477073
1700477074 获得生产蓝图
1700477075
1700477076 车的轮子是:benz的轮胎
1700477077
1700477078 车的引擎是:BMW的引擎
1700477079
1700477080 注意 最后一个运行结果片段,我们可以立刻生产出一辆混合车型,只要有设计蓝图,这非常容易实现。反观我们的抽象工厂模式,它是不可能实现该功能的,因为它更关注的是整体,而不关注到底用的是奔驰引擎还是宝马引擎,而我们的建造者模式却可以很容易地实现该设计,市场信息变更了,我们就可以立刻跟进,生产出客户需要的产品。
1700477081
1700477082
1700477083
1700477084
1700477085 设计模式之禅 30.2.3 最佳实践
1700477086
1700477087 注意看上面的描述,我们在抽象工厂模式中使用“工厂”来描述构建者,而在建造者模式中使用“车间”来描述构建者,其实我们已经在说它们两者的区别了,抽象工厂模式就好比是一个一个的工厂,宝马车工厂生产宝马SUV和宝马VAN,奔驰车工厂生产奔驰车SUV和奔驰VAN,它是从一个更高层次去看对象的构建,具体到工厂内部还有很多的车间,如制造引擎的车间、装配引擎的车间等,但这些都是隐藏在工厂内部的细节,对外不公布。也就是对领导者来说,他只要关心一个工厂到底是生产什么产品的,不用关心具体怎么生产。而建造者模式就不同了,它是由车间组成,不同的车间完成不同的创建和装配任务,一个完整的汽车生产过程需要引擎制造车间、引擎装配车间的配合才能完成,它们配合的基础就是设计蓝图,而这个蓝图是掌握在车间主任(导演类)手中,它给建造车间什么蓝图就能生产什么产品,建造者模式更关心建造过程。虽然从外界看来一个车间还是生产车辆,但是这个车间的转型是非常快的,只要重新设计一个蓝图,即可产生不同的产品,这有赖于建造者模式的功劳。
1700477088
1700477089 相对来说,抽象工厂模式比建造者模式的尺度要大,它关注产品整体,而建造者模式关注构建过程,因此建造者模式可以很容易地构建出一个崭新的产品,只要导演类能够提供具体的工艺流程。也正因为如此,两者的应用场景截然不同,如果希望屏蔽对象的创建过程,只提供一个封装良好的对象,则可以选择抽象工厂方法模式。而建造者模式可以用在构件的装配方面,如通过装配不同的组件或者相同组件的不同顺序,可以产生出一个新的对象,它可以产生一个非常灵活的架构,方便地扩展和维护系统。
1700477090
1700477091
1700477092
1700477093
[ 上一页 ]  [ :1.700477044e+09 ]  [ 下一页 ]