因为建造者模式一般由静态内部类实现,所以在JDK源码中搜索“public static class Builder”可以得到很多结果,但大多数与应用层程序员关系不大,我这里挑几个常用的和建造者模式相关的类,与大家讨论一下:

StringBuffer和StringBuilder

StringBuffer用于对字符串内容进行增删,字符串的“+”操作符底层也是由StringBuffer实现的,以下是StringBuffer的部分源码:

@Override
public synchronized StringBuffer append(CharSequence s, int start, int end){
    toStringCache = null;
    super.append(s, start, end);
    return this;
}

@Override
public synchronized StringBuffer append(char[] str) {
    toStringCache = null;
    super.append(str);
    return this;
}

对比一下StringBuilder的部分源码:

@Override
public StringBuilder append(CharSequence s, int start, int end) {
		super.append(s, start, end);
    return this;
}

@Override
public StringBuilder append(char[] str) {
		super.append(str);
    return this;
}

StringBuilder是Java 1.5版本的概念,很多方法。StringBuilder可以视为在单线程模型下性能更好的StringBuffer,不过Java 1.6版本引入锁升级概念后,在单线程模型下StringBuffer与StringBuilder的性能差距缩小了很多。


Calendar.Builder

Calendar类包含了对不同国家地区日历的处理,,在Java 1.8版本以后加入了Calendar.Builder这个静态内部类:

// 不使用Builder获取当前时间日期,以及设置日期为2024年1月8日中午12点整
Calendar calendar = Calendar.getInstance();
calendar.set(2024,0,8,12,0,0);

// 使用Builder的写法,注释掉中间两行就是获取当前时间日期
Calendar calendar = new Calendar.Builder()
		.setDate(2029,0,8)
    .setTimeOfDay(12,0,1)
    .build();