创建型 - 生成器(Builder)
本文主要分析设计模式 - 生成器(Builder),封装一个对象的构造过程,并允许按步骤构造。 @pdai
意图
封装一个对象的构造过程,并允许按步骤构造。
类图

实现
以下是一个简易的 StringBuilder 实现,参考了 JDK 1.8 源码。
public class AbstractStringBuilder {
    protected char[] value;
    protected int count;
    public AbstractStringBuilder(int capacity) {
        count = 0;
        value = new char[capacity];
    }
    public AbstractStringBuilder append(char c) {
        ensureCapacityInternal(count + 1);
        value[count++] = c;
        return this;
    }
    private void ensureCapacityInternal(int minimumCapacity) {
        // overflow-conscious code
        if (minimumCapacity - value.length > 0)
            expandCapacity(minimumCapacity);
    }
    void expandCapacity(int minimumCapacity) {
        int newCapacity = value.length * 2 + 2;
        if (newCapacity - minimumCapacity < 0)
            newCapacity = minimumCapacity;
        if (newCapacity < 0) {
            if (minimumCapacity < 0) // overflow
                throw new OutOfMemoryError();
            newCapacity = Integer.MAX_VALUE;
        }
        value = Arrays.copyOf(value, newCapacity);
    }
}
public class StringBuilder extends AbstractStringBuilder {
    public StringBuilder() {
        super(16);
    }
    @Override
    public String toString() {
        // Create a copy, don't share the array
        return new String(value, 0, count);
    }
}
public class Client {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        final int count = 26;
        for (int i = 0; i < count; i++) {
            sb.append((char) ('a' + i));
        }
        System.out.println(sb.toString());
    }
}
abcdefghijklmnopqrstuvwxyz
JDK
- java.lang.StringBuilder
 - java.nio.ByteBuffer
 - java.lang.StringBuffer
 - java.lang.Appendable
 - Apache Camel builders
 
参考
- 生成器(Builder) https://www.jianshu.com/p/5d34a496e517
 - 生成器(Builder)- 最易懂的设计模式解析 https://www.jianshu.com/p/7deb64f902db
 
总结
知识点的东西在上面参考文章中写的非常详细,读完之后问自己下面几个问题,直到可以流利的回答。
使用的场景?
本质是什么?
它解决了什么问题?
它体现了设计模式中什么原则?
存在的缺陷?
你认为与它相关的设计模式有哪些? 它们之间的区别有哪些?
*开源架构中哪些使用了这一模式?