目的
封装一个对象的构造过程,并允许按步骤构造。
类图
实现
以下是一个简易的 StringBuilder 实现,参考了 JDK1.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){
ensuseCapacityInternal(count + 1);
value[count++] = c;
return this;
}
private void ensuseCapacityInternal(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();
new Capacity = 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