0%

builder pattern

  1. 什么构建者模式
  2. 什么时候用构建者模式

    构建者模式

  3. 意义:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
  4. 时机:当构造参数大量的时候

代码

  • Product

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public class Product {
    private String parm1;
    private String parm2;

    public Product freshProduct(WorkerBuilder.ProductParms productParms){
    this.parm1 = productParms.parm1;
    this.parm2 = productParms.parm2;
    return this;
    }

    @Override
    public String toString(){
    return "Product [parm1=" + parm1 + ", parm2=" + parm2 + "]";
    }

    }
  • WorkerBuilder

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    public class WorkerBuilder {
    //持有产品的引用
    Product product = new Product();
    //参数内部类,隐藏构建逻辑
    ProductParms productParms = new ProductParms();

    public WorkerBuilder setParm1(String parm1) {
    productParms.setParm1(parm1);
    return this;
    }

    public WorkerBuilder setParm2(String parm2) {
    productParms.setParm2(parm2);
    return this;
    }

    public Product build(){
    return product.freshProduct(productParms);
    }


    //实际set参数的内部类
    class ProductParms {
    public String parm1;
    public String parm2;

    public void setParm1(String parm1) {
    this.parm1 = parm1;
    }

    public void setParm2(String parm2) {
    this.parm2 = parm2;
    }
    }
    }

构建者模式 vs. 工厂模式

工厂方法模式注重的是整体对象的创建方法,而建造者模式注重的是部件构建的过程,旨在通过一步一步地精确构造创建出一个复杂的对象。我们举个简单例子来说明两者的差异,如要制造一个超人,如果使用工厂方法模式,直接产生出来的就是一个力大无穷、能够飞翔、内裤外穿的超人;而如果使用建造者模式,则需要组装手、头、脚、躯干等部分,然后再把内裤外穿,于是一个超人就诞生了。