具体实现
package com.jianzhioffer.builder;
import java.util.Arrays;
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) {
expandCapacity(minimumCapacity);
}
}
public void expandCapacity(int minimumCapacity) {
int newCapacity = value.length * 2 + 2;
if (newCapacity < minimumCapacity) {
newCapacity = minimumCapacity;
}
if (newCapacity < 0) {
if (minimumCapacity < 0) {
throw new OutOfMemoryError();
}
newCapacity = Integer.MAX_VALUE;
}
// 一般不要轻易用,复制代价高
value = Arrays.copyOf(value, newCapacity);
}
}
package com.jianzhioffer.builder;
public class StringBuilder extends AbstractStringBuilder {
public StringBuilder() {
super(16);
}
@Override
public String toString() {
return new String(value, 0, count);
}
}
主函数
package com.jianzhioffer.builder;
/**
* 生成器:封住一个对象的构造过程,允许按步骤生成。
* AbstractStringBuilder:定义StringBuilder过程。
* StringBuilder:初始化大小、输出。
* Client:调用StringBuilder。
* @author hexiaoli
*
*/
public class Client {
public static void main(String[] args) {
StringBuilder sBuilder = new StringBuilder();
final int count = 26;
for (int i = 0; i < count; i++) {
sBuilder.append((char)('a'+i));
}
System.out.println(sBuilder.toString());
}
}