Builder 生成器模式
名称:也叫建造模式、生成器模式
问题:
通常产品是由多个零件组成的,不同的产品,组成零件不一样,组装方式也不一样。假设一个产品,由2部分组成(至于如何组成,可能随着技术发展,会不一样),另外的产品,有3个部分组成,我们需要创建这些产品,如何做到完美实现呢?
解决:
这样,我们作如下设计:
设计一个抽象的建造者Builder接口,规范产品的组成部分建造:定义buildPart1()和buildPart2()、buildPart3方法。
具体的实现者 ConCreate Builder(实现Builder接口)在外部请求下建造产品。
导演Director类同客户端打交道,将创建产品的请求划分为part1\part2的请求,再将这些请求委派给具体的实现者。
产品Product是需要创建的对象,但是可以有多个。每一个产品由于不一样,所以必须(一般)由一个具体的实现者来实现具体细节。
效果:
这样,对于客户来讲,完全同产品的多样性和复杂性无关了,仅需要同导演类对象打交道,通过导演类实例来实现具体的产品创建。而导演类是通过Builder接口来实现产品创建的。
图:
举例说明:
女娲造人,人(产品Product)由灵魂、四肢、感官等多70多个部件(part1…part70)组成,女娲(建造者Builder)命令 诸神实现各个部分,最后通过getResult方法返回一个产品—人。
如果早原始人,那可能以上就够了,但是如果造现代人,还有容貌肯定不同、思想也不单纯(产品组成细节不同了),但还是可以由70多个部分组成,那么需要建造者具体实现时候不一样(构造灵魂时候,现代人跟古代人肯定不一样),但同样需要构造70多个部分(如果某一部分不需要,仅仅返回空即可)