首页 > 代码库 > 23种设计模式----------建造者模式

23种设计模式----------建造者模式

建造者模式:像是模板方法模式的升级。也叫生成器模式。将一个复杂对象的构造与它的表示分离,使得同样的构建过程可以创建不同的表示。其实就是创建一大类的东西, 但是具体又有些差异。

在建造者模式中,一般有四个角色:

1,Product产品类。

  该类一般实现了模板方法模式。

2,Builder抽象的建造者。

  规范产品的组建,一般是由子类实现。

3,ConcreteBuilder具体的建造者。

  实现抽象类定义的所有方法,并且可以返回一个组建好的具体对象。

4,Director导演类(一般是包涵多种具体产品差异的方法)。

大致示例代码:

Product类:

1 package com.yemaozi.builderpattern;2 3 public abstract class Product {4     //一般实现模板方法的抽象类。5 }

具体的Product类:

//ProductApackage com.yemaozi.builderpattern;public class ProductA extends Product{    public void doSomething(){            }}//ProductBpackage com.yemaozi.builderpattern;public class ProductB extends Product{    public void doSomethding(){            }}

建造器:

1 package com.yemaozi.builderpattern;2 3 public interface Builder {4     //设置产品不同的方法5     public abstract void setPart();6     //构建产品7     public abstract Product builderProduct();8 }

具体的建造器,具体的建造器个数与具体产品类的数目一致。

 1 //ConcreteBuilderA 2 package com.yemaozi.builderpattern; 3  4 public class ConcreteBuilderA implements Builder{ 5  6     Product p = new ProductA(); 7      8     public void setPart() { 9     }10 11     public Product builderProduct() {12         return p;13     }14 }15 //ConcreteBuilderB16 package com.yemaozi.builderpattern;17 18 public class ConcreteBuilderB implements Builder{19 20     Product p = new ProductB();21     22     public void setPart() {23     }24     25     public Product builderProduct() {26         return p;27     }28 }

导演类:导演类一般是为了预设置不同产品差异的,若是想得到对应的产品,直接到Director里获取,因为,该类就是为了生产出所有的产品,以供获取。导演类一般可以有多个。

 1 package com.yemaozi.builderpattern; 2  3 public class Director { 4     private Builder b1 = new ConcreteBuilderA(); 5     private Builder b2 = new ConcreteBuilderB(); 6     //构建A产品 7     public Product getProductA(){ 8         b1.setPart(); 9         Product p = b1.builderProduct();10         return p;11     }12     //构建B产品13     public Product getProductB(){14         b2.setPart();15         return b2.builderProduct();16     }17 }

此外,建造者模式还有一个重要的角色,就是零件(理解为产品类里的方法),建造者是通过零件的组装来创建对象。组装顺序不同(调用方法顺序不同),建造的对象就会有着差异,也是,建造者模式要表达的核心意义。说白了,建造者最主要的功能是基本方法的调用顺序的安排。

和工厂模式的差异:

  工厂方法模式重点是创建。创建零件是它的主要职责,组装顺序不是它关心的。

  建造者模式重点是对已产生的零件进行组装。从而也达到创建对象的效果。

 

23种设计模式----------建造者模式