建造模式是对象的创建模式。建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象
有些情况下,一个对象的一些性质必须按照某个顺序赋值才有意义。
在某个性质没有赋值之前,另一个性质则无法赋值。这些情况使得性质本身的建造涉及到复杂的商业逻辑。
这时候,此对象相当于一个有待建造的产品,而对象的这些性质相当于产品的零件,建造产品的过程是建造零件的过程。由于建造零件的过程很复杂,因此,这些零件的建造过程往往被“外部化”到另一个称做建造者的对象里,建造者对象返还给客户端的是一个全部零件都建造完毕的产品对象。
通常Builder模式有两个主要类,一个是Builder类,另外一个是Product类,Builder类负责生产Product,
有些人会问你是不是SB啊,Product类不是有自己的构造函数吗?随便调用一个new Product()不就OK了吗?为什么要那么麻烦去搞多一个Builder呢?--虽然本人觉得这人问题问得很SB,不过确实能这样问也证明有经过思考的,当然回答这个回答了也就可以证明了Builder模式的价值。
高手解答:由于某些对象创建时需要依赖一定的流程与内外属性(自身属性,或者其它对象)的条件限制,所以创建这种复杂对象时需要有一个复杂的流程与算法,为了使算法与对象本身分离达到复用算法的目的,所以这时候需要使用一个名字叫XXXBuilder的类来将这个创建复杂对象的算法抽象出来,达到利用的目的。
在什么情况下使用建造模式
1. 需要生成的产品对象有复杂的内部结构,每一个内部成分本身可以是对象,也可以仅仅是一个对象(即产品对象)的一个组成部分。
2. 需要生成的产品对象的属性相互依赖。建造模式可以强制实行一种分步骤进行的建造过程,因此,如果产品对象的一个属性必须在另一个属性被赋值之后才可以被赋值,使用建造模式是一个很好的设计思想。
3. 在对象创建过程中会使用到系统中的其他一些对象,这些对象在产品对象的创建过程中不易得到。