Builder模式

来源:互联网 发布:c语言中文网官网 编辑:程序博客网 时间:2024/06/03 23:42

1.意图

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

2.动机

一个汽车装配厂能够装配不同性能、油耗、品牌的汽车。问题在于可能装配的汽车是无限的。因此要能够很容易实现新的汽车的增加,而不改变装配厂。

一个解决办法是用一个可以装配汽车的FitRoom对象配置装配厂类CarFactory。当CarFactory装配汽车时,它使用FitRoom。FitRoom对象负责汽车部件的配置。如下图所示:

FitRoom的子类对不同的汽车进行特殊处理。例如,一个BMW_I8_FitRoom只负责选择合适的引擎以及内饰,而忽略其他的装配过程。另一方面,Ford_Shelby装配对象除了选择合适的引擎外,还需要选择合适的轮胎、大梁。

每种FitRoom子类将创建和装配一个复杂汽车对象的机制隐含在抽象接口的背后。装配厂(CarFactory)独立于装配车间(FitRoom),装配厂负责对装配出来的汽车进行出口、销售等等其他操作。

Builder模式描述了所有这些关系。每一个FitRoom在该模式中被称为生成器(builder),而CarFactory则称为导向器(director)。在这个例子中,Builder模式将装配厂的算法与怎样创建和表示一个汽车的算法分离开来。

3.适用性

在以下情况使用Builder模式:

当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

当构造过程必须允许被构造的对象有不同的表示时。

4.结构

5.效果

它使你可以改变一个产品的内部表示 ------ Builder对象提供给导向器一个构造产品的抽象接口。该接口使得生成器可以隐藏这个产品的表示和内部结构。它同时也隐藏了产品是如何装配的。你在改变产品的内部表示时所要做的就是定义一个新的生成器;

它将构造代码和表示代码分开 ------ 客户不需要知道定义产品内部结构的类的所有信息。这些类是不出现在Builder接口中的。

它使你可对构造过程进行更精细的控制 ------ Builder模式与一下子就生成产品的创建型模式不同,它是在导向者的控制下一步步构造产品的。

6.And One More Thing

为了不曲解大师的寓意,文章里的大多数语句、语境摘自GOF的《Design Patterns ---Elements of Reusable Object-Oriented Software》,你可以从此书中了解更详细的内容。

0 0
原创粉丝点击