因为建造者模式一般由静态内部类实现,所以在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();