天天看点

创建型模式--建造者模式【Builder Pattern】

介绍

建造者模式使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

建造者(Builder Pattern)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。

框架应用

  • java.lang.StringBuilder#append() (非线程安全)
  • java.lang.StringBuffer#append() (线程安全)
  • java.nio.ByteBuffer#put()(还CharBuffer,ShortBuffer,IntBuffer,LongBuffer

    FloatBuffer和DoubleBuffer)

  • javax.swing.GroupLayout.Group#addComponent()
  • 所有的实现 java.lang.Appendable
  • BaseBuilder、XMLConfigBuilder(MyBatis)

模式的结构

建造者(Builder)模式的主要角色如下。

  • 产品角色(Product):它是包含多个组成部件的复杂对象,由具体建造者来创建其各个滅部件。
  • 抽象建造者(Builder):它是一个包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品的方法 getResult()。
  • 具体建造者(Concrete Builder):实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。
  • 指挥者(Director):它调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息。

源码

  • java.lang.StringBuilder#append()
@Override
public StringBuilder append(boolean b) {
    super.append(b);
    return this;
}
           
  • java.lang.StringBuffer#append()
@Override
public synchronized StringBuffer append(String str) {
    toStringCache = null;
    super.append(str);
    return this;
}
           
  • java.nio.ByteBuffer#put()
public final ByteBuffer put(byte[] src) {
    return put(src, 0, src.length);
}
           
  • ByteBuffer的简单使用
package org.spring.pattern;

import java.nio.ByteBuffer;

/**
 * @author yanyugang
 * @description ByteBuffer的简单使用: https://www.jianshu.com/p/80bd222fa971
 * @date 2019/9/5 21:43
 */
public class BuilderPatternTest {
    public static void main(String[] args) {
        ByteBuffer buffer=ByteBuffer.allocate(1024);
        // 写入数据
        buffer.put("Hello World ".getBytes());
        buffer.put("Hello Java ".getBytes());
        buffer.put("Good Morning ".getBytes());
        System.out.println(buffer.toString());
        byte[] array = buffer.array();
        System.out.println(new String(array));
    }
}

           

参考文档

  • 建造者模式(Bulider模式)详解

推荐文档:

  1. https://blog.csdn.net/u013256816/article/details/50978024

继续阅读