美文网首页
十三、Builder建造者模式

十三、Builder建造者模式

作者: Serenity那年 | 来源:发表于2018-10-28 21:31 被阅读7次

在实际的开发中,如果需要将一个复杂对象的构建与它的表示分离,使得同样的构建过程产生出不同的表示的意图时,我们就需要使用“建造者模式”,又叫“生成器模式”。也就是说:构建的“过程”是稳定的,但是具体的构建“细节”是不同的。


如果使用了建造者模式,那么用户就只需要指定建造的类型就能够得到最终的结果,而具体的建造过程和细节就不需要知道了。

建造者模式(Builder):将一个复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式结构图.png
一、Builder是什么?
  • 1.是为了创建一个Product对象的各个部件指定的抽象接口;

/**
 * Created by serenitynanian on 2018/6/5.
 * 抽象建造者类,确定产品由两个部件PartA和PratB组成,并声明一个得到产品建造结果的方法getProduct()
 */

public abstract class Builder {
    public abstract void buildPartA();
    public abstract void buildPartB();
    public abstract Product getProduct();
}
二、ConcreteBuilder是什么?
  • 1.它是具体的建造者,实现Builder接口,构造和装配各个部件;
/**
 * Created by serenitynanian on 2018/6/5.
 *
 * 具体的建造类
 */

public class ConcreteBuildOne extends  Builder{

    private Product product = new Product();

    @Override
    public void buildPartA() {
        product.add("部件A");
    }

    @Override
    public void buildPartB() {
        product.add("部件B");
    }

    @Override
    public Product getProduct() {
        return product;
    }
}

##### 三、Product是什么?
* 1.它是构造出的具体产品

/**

  • Created by serenitynanian on 2018/6/5.
  • 产品类,由多个部件组成
    */

public class Product {

List<String> parts = new ArrayList<>();

public void add(String part) {
    parts.add(part);
}

public void show() {
    for (int i = 0; i < parts.size(); i++) {
        System.out.println("-----产品---部件---->"+parts.get(i));
    }
}

}


##### 四、Director是什么?
* 1.指挥者(Director):用它来控制建造过程,也用它来隔离用户与建造过程的关联;
* 2.它是构建一个使用Builder接口的对象;

/**

  • Created by serenitynanian on 2018/6/5.
  • 指挥者类
    */

public class Director {

/**
 * 用来指挥建造过程
 * @param builder
 */
public void concreateBuilder(Builder builder){
    builder.buildPartA();
    builder.buildPartB();
}

}


##### 五、客户端使用过程

public class ClientTest {

public static void main(String[] args) {

    Director director = new Director();

    Builder b1 = new ConcreteBuildOne();
    Builder b2 = new ConcreteBuildTwo();

    //指挥者用ConcreteBuildOne的方法来创建产品
    director.concreateBuilder(b1);
    b1.getProduct();

    //指挥者用ConcreteBuildTwo的方法来创建产品
    director.concreateBuilder(b2);
    b2.getProduct();
}

}


##### 六、什么时间使用建造者模式呢?
主要是用于创建一些比较复杂的对象,这些对象内部构建的建造顺序是稳定的,但对象内部的构建通常面临着复杂的变化;

##### 总结
* 1.建造者模式是逐步建造产品的,所以建造者的Builder类里的那些建造方法必须要足够普遍,以便为各种类型的具体建造者构造;

相关文章

  • 设计模式(四):建造者模式

    建造者模式(Builder Pattern) 建造者模式(Builder Pattern)将一个复杂的构建与其表示...

  • 建造者模式

    建造者模式 创建型模式 Director、Builder、Product建造模型 Builder负责构建Produ...

  • 十三、Builder建造者模式

    在实际的开发中,如果需要将一个复杂对象的构建与它的表示分离,使得同样的构建过程产生出不同的表示的意图时,我们就需要...

  • 设计模式之建造者模式

    建造者模式的定义   建造者模式(Builder Pattern)也叫做生成器模式,其定义如下:  Separat...

  • Builder pattern

    Builder pattern 这里所介绍的建造者模式不是GOF中介绍的建造者模式。GOF中的建造者模式主要用于抽...

  • 建造者模式

    建造者模式的定义 建造者模式(Builder Pattern)也叫做生成器模式,其定义如下:Separate th...

  • 设计模式--建造者模式

    目录 本文的结构如下: 引言 什么是建造者模式 模式的结构 典型代码 代码示例 Builder模式变种 建造者模式...

  • Android 中的建造者模式

    Android 中的建造者模式 概述 建造者模式(Builder Pattern)也叫生成器模式,其定义如下:se...

  • 设计模式-构建者模式

    概念 建造者模式(英:Builder Pattern)是一种创建型设计模式,又名:生成器模式。GOF 给建造者模式...

  • 建造者模式-Builder(建造者)

    前言 在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机是...

网友评论

      本文标题:十三、Builder建造者模式

      本文链接:https://www.haomeiwen.com/subject/fcgpsftx.html