设计模式-创建型:Builder

来源:互联网 发布:linux注释 编辑:程序博客网 时间:2024/05/01 03:08

序:以前学过,但没有实际运用,理解也不深。重新看,一定要看出些东西来。

 

于在www.google.com(这个更好用些)找到一篇东西,看了抬头,挺好:

 

Builder pattern is used to construct a complex object step by step and the final step will return the object. The process of constructing an object should be generic so that it can be used to create different representations of the same object.

 

翻译一下:当一个对象需要一步一步创建、并且最后一步是会返回这个对象时(创建的步骤稳定),就可以考虑用创建者模式了。

               若创建这个对象的步骤应该是普遍适用(可以抽象出来的),那么这个创建步骤就可以创建其他不同的对象了(它们基于同一个创建对象的步骤)

 

Gof say:"

Separate the construction of a complex object from its representation so that the same construction process can create different representations"(将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示)

 

举例:创建自行车、创建摩托车、汽车。

   分析:我们可以发现:创建车都会创建车架子、轮子、车门、发动机...(仅举四个,假设这个四部分创建好了,我们就算把车造好了)

1.假设具体的一辆车是有如下公有特性(展现,具体的内容可能不一致)

 

 

2.我们不妨设计好稳定的创建车的通用步骤(这个是地顺序被弱化了,四者谁先谁后在这里就过多不考虑):

 

3. 根据2定义好的步骤,我们根据需要分别创建各种车辆:

 

4.专门找一个对象来负责构建具体的产品(Director)---将重复的创建产品的步骤放在一个统一地方。

  留心的人,可能发现上面的步骤中没有返回产品对象的方法;如果您再留言一点,产品对象是通过属性返回的(当然你也可以新加一个方法返回产品对象,不用属性返回)

 

使用:

 

 

结果:

 

 

我们再来看类关系图:

我们现在可以分析Builder Pattern 对象的职责

 

  Builder(抽象建造者):为创建一个Product对象指定创建步骤;

 

      ConcreteBuilder(具体建造者):
 
       1.构造和装配产品的各个部件(实现Builder接口).
 
       2.返回这个产品(可视为创建的最后一步)。
 
      Director:指挥者
       负责执行对象逻辑(避免代码重复化)。

 
      Product:产品角色
 
        1.被构建的复杂对象,具体建造者 创建该产品的内部表示并表示定义它的装配步骤(这里有不同产品的变化,如:自行车装配发动机和摩托车是不一样的)。
 
        2.包含定义组成部件(Builer的接口返回),包括将这些部件装配成最终产品的接口(Show方法)。

 

 闲想:Build Pattern与Abstract Factory

 

Build Pattern与Abstract Factory是大的区别在于:Build Pattern创建的对象是需要一步一步创建的,并且这个创建步骤是稳定的。(它们二者都能创建复杂的对象)

 

 

 

 

原创粉丝点击