Abstract Factory 对一整套产品的统一创建。 也就是说,相当于一个模板,一个具体的工厂,创建一个系列的产品,这一系列的产品可能有着同一个风格,因此,将不同系列的产品分派到不同的工厂中去做。缺点就是这一系列的产品规划,是已经知道的,如果要加入新的产品到系列中,就需要扩展工厂,修改底层。这模式可以用来控制差异化,也就是说,我要在一个统一系列同,对某一个产品做特别修改,必需要重新生成一个新的工厂。
Builder 我个人觉得跟Abstract Factory很相似,之所以称为Builder,就是因为在他提供的接口中,并不是生成最基本的零件(这是Abstract Factory做的事情),而是生成零件后,还负责装配和组和(Abstract Factory不做组和),这样调用者,就不用关心是哪些零件组成的最终产品,而只需要找到能够生成最终产品的Builder就可以了,而通过派生Builder,就可以实现不同规格的零件,按不同的方式组合。说白了,Builder比Abstract Factory多一个装配过程,如果在底层中不能确定装配过程以及零件细节,就使用Builder,反之如果在底层就要限制装配过程及零件规格,就使用Abstract Factory。
Factory Method 跟Abstract Factory有点相似,但是Abstract Factory提供的是一整套零件,而Factory Method提供的是单个零件,当一个产品的装配方式及零件规格固定后,可以使用Factory Method,让派生类按零件规格生成自己需要的零件。

《设计模式》这书02年买的,老实说当时根本看不懂,翻了一下头大了就放边上了,做了这长时间后,翻出来看看,发现可以懂一点了。就拿这几种创建模式来说,放到现实工业生产上去,就好比一条流水线,在什么样的情况下,可以让这个流水线生成更多类型的产品。流水线上输入的是有规格的零件,输出的是最终产品。打个比方,Abstract Factory就是为这个流水线提供零件而存在的,而且,每个具体的工厂,提供的是一整套零件,但是他们的规格相同,可以适用于这套流水线,如果有规格不适应的零件出现,那么这个流水线是无法工作的。
而Factory Method是这样一种流水线,他的每一道工序及零件规格是固定的,如果要修改流水线,只用换零件就可以了,想换哪个零件,自己做主,只要在零件的规格范围内(重围工厂方法)。
Builder,就是一个自给自足的流水线了,使用这个流水线的人,不需要知道他是怎么工作的,他需要哪些零件,而只用知道他生产的最终产品是不是你所需要的就可以了。这样,流水线提供者,就可以重新定义零件和装配方式。