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

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

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

1,Product产品类。

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

2,Builder抽象的建造者。

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

3,ConcreteBuilder具体的建造者。

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

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

大致示例代码:

Product类:

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

具体的Product类:

//ProductA
package com.yemaozi.builderpattern;

public class ProductA extends Product{
    public void doSomething(){
        
    }
}
//ProductB
package 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 //ConcreteBuilderB
16 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 }

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

和工厂模式的差异:

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

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

原文地址:https://www.cnblogs.com/yemaozistar/p/4158764.html