美文网首页工作生活
建造者模式--StringBuilder源码剖析

建造者模式--StringBuilder源码剖析

作者: 别拿爱情当饭吃 | 来源:发表于2019-07-03 11:28 被阅读0次

类图

StringBuilder类图

StringBuilder.java

public final class StringBuilder
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence
{
//省略一堆变量,一堆构造方法
。。。
//建造者的表现,赋值完后,返回实例本身。这样子就可以实现链式调用。即this.append("a").append("b");
 @Override
    public StringBuilder append(String str) {
        super.append(str);
        return this;
    }
//省略一堆方法
。。。
}

StringBuffer.java

public final class StringBuffer
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence
{
//省略一堆变量,一堆构造方法
。。。
//这个方法,其实和StringBuilder的append方法一模一样,
//因为它们的父类都是AbstractStringBuilder,然后都是赋值完后,
//就返回本身。这个是线程安全的。(加锁了)
 @Override
    public synchronized StringBuffer append(String str) {
        toStringCache = null;
        super.append(str);
        return this;
    }
//省略一堆方法
。。。
}

AbstractStringBuilder.java

abstract class AbstractStringBuilder implements Appendable, CharSequence {
    //省略一堆方法
    。。。
    //这个方法,就是被StringBuilder和StringBuffer调用的append方法
    public AbstractStringBuilder append(String str) {
        if (str == null)
            return appendNull();
        int len = str.length();
        ensureCapacityInternal(count + len);
        str.getChars(0, len, value, count);
        count += len;
        return this;
    }
    //省略一堆方法
}


CharSequence.java

CharSequence接口,被StringBuilder和StringBuffer都实现了,因为字符串底层就是字符数组。实际上,字符串就是字符序列。

public interface CharSequence {
    //省略一堆方法,因为这不是主要介绍CharSequence
}

Serializable.java

一个标记接口,序列化接口

public interface Serializable {
}

相关文章

网友评论

    本文标题:建造者模式--StringBuilder源码剖析

    本文链接:https://www.haomeiwen.com/subject/agcqhctx.html