起初打算按照以前的日产系列写建造者模式。但参考了网上的不少文章,让我对建造者模式更加的困惑,也惧怕本身没法已易懂的方式进行解释。最后经过Google发现了一篇英文文章Builder,使我茅塞顿开。我本身对这篇文章进行了翻译,但愿对你们理解建造者模式有帮助。设计模式
建造者模式是建立型设计模式,用来逐步建立复杂的对象。使用建造者模式可使用相同的构造代码生成不一样类型、不一样表示的对象。
数组
想象一个复杂的对象,它须要大量字段和嵌套对象进行初始化。这种的初始化代码通常会隐藏在一个包含大量参数的庞大构造函数中。
函数
好比,咱们来建一个房子对象。建造一个简单的房子须要四面墙、一层地板、一扇门、一对窗户和一个屋顶。可是若是咱们想要一个更大更明亮,而且有后院和其余好东西(好比暖气系统、管道和电线)的房子,那该怎么办呢?ui
最简单的解决方案是继承基本House类并建立一组子类来覆盖全部参数组合,可是后获得大量的子类。任何新的参数都须要进一步扩展这个层次结构。翻译
另外一个方法不用派生子类。你能够建立一个包含全部参数的构造函数。这种方法不须要大量的子类,可是存在另外的问题。
在大多数状况下,大部分的参数是不被使用的。这样调用构造函数时会显得代码十分难看。设计
建造模式建议您从本身的类中提取对象构造代码,将其移动到被称为生成器的独立对象中。
对象
建造者模式将对象构造组织为一组步骤(建墙、建门等)。在Builder对象上执行一系列步骤就能够建立一个对象。最重要的一点是,您无需调用全部的步骤,须要调用须要的步骤便可。blog
当须要构建产品的各类表现形式时,某些步骤可能须要不一样的实现。好比,小屋的墙壁能够用木头建造,但城堡的墙壁须要用石头建造。
这种场景下,能够建立不一样的建造者类来实现相同的建造步骤,不一样的类型。接下来就可使用这些建造不一样类型的对象。继承
例如,第一个建造者用木头和玻璃建造一切,第二个用石头和铁建造一切,第三个用黄金和钻石建造一切。经过调用相同的步骤,你能够从第一个建造者那里获得一个普通的房子,从第二个建造者那里获得一个小城堡,从第三个建造者那里获得一个宫殿。接口
咱们能够进一步的将一系列对建造者步骤的调用提取到一个类中,这个类被称为Director。
Director类只定义了执行构建步骤的顺序,而构建器提供了这些步骤的实现。
Direct类不是绝对必要的,咱们能够按照特定的顺序直接调用Builder。可是,Director是放置各类可重用构造方案的好方法。
另外,Director类彻底隐藏了产品构造的细节。客户端只须要将一个Builder和一个Director关联起来就能够获得构建结果。
构造复杂对象,将构造代码和业务代码分离。
代码我没有粘过来,直接访问参考文献里的底部便可。