生成器(Builder)
Intent
封装一个对象的构造过程,并允许按步骤构造。
Class Diagram
Implementation
以下是一个简易的 StringBuilder 实现,参考了 JDK 1.8 源码。
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
| 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) { 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) throw new OutOfMemoryError(); newCapacity = Integer.MAX_VALUE; } value = Arrays.copyOf(value, newCapacity); } }
|
1 2 3 4 5 6 7 8 9 10 11
| public class StringBuilder extends AbstractStringBuilder { public StringBuilder() { super(16); }
@Override public String toString() { return new String(value, 0, count); } }
|
1 2 3 4 5 6 7 8 9 10
| 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()); } }
|
1
| abcdefghijklmnopqrstuvwxyz
|
JDK
源码:https://github.com/HWYWL/design-patterns