定义:
Builder模式是一步步建立一个复杂对象的建立型模式,它容许用户在不知道内部构建细节的状况下,能够更精细地控制对象的构造流程。该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示隔离开来。编程
使用场景:
将一个复杂对象的构建与它的表示分离,使得一样的构建过程能够建立不一样的表示。ui
UML类图:
建造者模式的结构中还引入了一个指挥者类Director,该类的做用主要有两个:一方面它隔离了客户与生产过程;另外一方面它负责控制产品的生成过程。指挥者针对抽象建造者编程,客户端只须要知道具体建造者的类型,便可经过指挥者类调用建造者的相关方法,返回一个完整的产品对象。 在客户端代码中,无须关心产品对象的具体组装过程,只需肯定具体建造者的类型便可,建造者模式将复杂对象 的构建与对象的表现分离开来,这样使得一样的构建过程能够建立出不一样的表现。
在实际开发过程当中,Director角色常常会被省略,而直接使用一个Builder来进行对象的组装,者Builder一般为链式调用。
优势:
- 在建造者模式中, 客户端没必要知道产品内部组成的细节,将产品自己与产品的建立过程解耦,使得相同的建立过程能够建立不一样的产品对象。
- 每个具体建造者都相对独立,而与其余的具体建造者无关,所以能够很方便地替换具体建造者或增长新的具体建造者, 用户使用不一样的具体建造者便可获得不一样的产品对象 。
- 能够更加精细地控制产品的建立过程。将复杂产品的建立步骤分解在不一样的方法中,使得建立过程更加清晰,也更方便使用程序来控制建立过程。
- 增长新的具体建造者无须修改原有类库的代码,指挥者类针对抽象建造者类编程,系统扩展方便,符合“开闭原则”。
缺点:
- 建造者模式所建立的产品通常具备较多的共同点,其组成部分类似,若是产品之间的差别性很大,则不适合使用建造者模式,所以其使用范围受到必定的限制。
- 若是产品的内部变化复杂,可能会致使须要定义不少具体建造者类来实现这种变化,致使系统变得很庞大。