Builder模式结构:html
Factory模式一进一出,Builder模式是分步流水线做业。
当你须要作一系列有序的工做或者按照必定的逻辑来完成建立一个对象时 Builder就派上用场啦。
咱们能够看到,Builer模式与工厂模式是极为类似的,可是他们仍是有区别的:编程
1、从结构上来看,Builder模式比工厂模式多了一个“导演类”的角色。
在Builder模式的类图中,假如把这个导演类看作是最终调用的客户端,那么图中剩余的部分就能够看做是一个简单的工厂模式了。设计模式
2、二者所建立的产品类型彻底不同。
Factory建立只能是单一的产品(单一在这指它非复合产品),而Builder所建立的产品是复合产品,即产品自己就是由其它部件产品组成的。
举个例子来讲,如今要生产一辆车,假设它就只由这三个部分组成:玻璃、轮子、发动机。
对于工厂模式来讲,他建立后返回的,只能是玻璃,或者轮子,抑或是发动机。
无论怎么样,他不能向客户返回一辆完整的汽车,要获得一辆完整的汽车,客户必须本身动手去把这些零部件组装成一辆汽车。
从这个意义上来说,工厂模式中的工厂,只是充当了零件厂的角色。
那Builder又是如何建立产品的呢?在Builder模式中,通常不须要、也不充许向客户返回单个部件,他向客户返回的,仅仅就是一部已经彻底组装好的汽车成品。
对于汽车部件的生产细节,客户不须要、也不该该让他们知道。post
写到这,我忽然想到了组装电脑与品牌电脑的差异,组装电脑虽然价格便宜,且易于改动,但性能没有保证,另外你本身还必须了解不少有关电脑方面的知识;对于品牌电脑,价格贵这点先暂时不说,关键在于他不灵活,可是它的性能能够获得很好保证(由厂家),这易像咱们在Builder的系统端保证部件的质量同样。另外,对于品牌电脑,客户根本不须要了解多少电脑组装方面的知识,就能够把一台电脑抱回家,开机使用了。
那么,在实际运用中,你是喜欢作DIY一族呢,仍是喜欢稳定有保证的质量呢?好像在咱们编程的这个过程当中,咱们比较趋向于使用“品牌电脑”。这也就为咱们正确使用这两种设计模式提供了一个方向:若是你要生产的产品是由不一样部件组成的,你最好使用Builder模式,而非Factory模式。性能
3、Builder和Factory的差异,还在于他们所生产部件产品所在产品树的问题。
这样说,可能有点拗口。具体来讲吧,在工厂模式中,咱们知道,一个工厂能够建立多个产品,但一个工厂模式中所建立的某个产品,都会和另外一个工厂中所建立的产品在同一棵继承树上。
Builder能够建立出能够建立出风马不相及的产品(虽然咱们不这么作),可是Factory模式通常是建立一类产品。ui
转:https://www.cnblogs.com/yejg1212/archive/2013/02/25/2932526.htmlurl