美文网首页
建造者模式(Builder)

建造者模式(Builder)

作者: 小丸子的呆地 | 来源:发表于2021-07-04 05:19 被阅读0次

建造者模式,属于创建型模式。将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。

当一个类的构造函数参数个数超过4个,而且这些参数有些是可选的参数,考虑使用构造者模式。

建造者模式UML

首先对于复杂对象Product的创建,我们需要定义组件抽象实现Builder,然后需要不同的组件具体实现方式ConcreteBuilder1和ConcreteBuilder2,然后需要指挥者Director负责装配这些组件(为了简化代码,Director可以直接集成在builder或者product中,如果装配逻辑十分繁杂,建议还是单独定义Director进行装配)。

// 对象
public class Product {
    private List<String> parts = new ArrayList<>();

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

    @Override
    public String toString() {
        return "Product{" +
                "parts=" + parts +
                '}';
    }
}
// 组件抽象实现
public abstract class Builder {
    public abstract void buildPartA();

    public abstract void buildPartB();

    public abstract void buildPartC();
}
// 组件具体实现
public class ConcreteBuilder1 extends Builder{

    private Product product = new Product();
    @Override
    public void buildPartA() {
        product.addPart("part A");
    }

    @Override
    public void buildPartB() {
        product.addPart("part B");

    }

    @Override
    public void buildPartC() {
        product.addPart("part C");

    }

    public Product getProduct() {
        return product;
    }
}

public class ConcreteBuilder2 extends Builder{

    private Product product = new Product();
    @Override
    public void buildPartA() {
        product.addPart("part a");
    }

    @Override
    public void buildPartB() {
        product.addPart("part b");

    }

    @Override
    public void buildPartC() {
        product.addPart("part c");

    }

    public Product getProduct() {
        return product;
    }
}
// 指挥者 负责装配对象
public class Director {

    public void construct(Builder builder){
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
    }

}

举个例子,我们要实现一个文档转换器,负责将所有其他格式的文件转换成Word文档。
首先我们定义一个Word文档有哪些组件,比如标题、正文、页码、页眉页脚。
其次我们定义Word文档各个组成部位的抽象实现。
再次我们定义txt文件转换Word文档各个组成部位的具体实现。
最后我们定义一个文档转换器去装配这些组件。
这样我需要将txt转换为Word,只需要传递一个txt的builder;
后面如果我需要将xml转换为Word,也可以实现一个xml文件转换Word文档各个组成部位的具体实现。

应用

  • Guava的内存缓存使用的就是建造者模式的变种。
  • ClassBuilder是一个生成器,Class使用他为自己创建子类。在这个例子中,一个Class及时Director也是Product。
  • ByteCodeStream是一个生成器,他将一个被编译了的方法创建为字节数组。

相关模式

Abstract Factory与Builder类似,因为他们都可以创建复杂对象。主要区别是Builder模式着重于一步步构造一个复杂对象。为Abstract Factory着重于多个系列的产品对象(简单的或者是复杂的)。Builder在最后一步返回产品,而Abstract Factory,产品立即返回。
组合模式通常用builder是生成

相关文章

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

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

  • 建造者模式

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

  • 设计模式之建造者模式

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

  • Builder pattern

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

  • 建造者模式

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

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

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

  • Android 中的建造者模式

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

  • 设计模式-构建者模式

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

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

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

  • 五 建造者模式

    本文主要介绍创建型模式的最后一种————建造者模式。 概念 建造者模式(英:Builder Pattern)是一种...

网友评论

      本文标题:建造者模式(Builder)

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