定义
    使用共享对象可有效地支持大量细粒度的对象

    使用场景

    1. 系统中存在大量的相似对象。
    2. 细粒度的对象都具备较接近的外部状态,而且内部状态与环境无关,也就是说对象没有特定身份。
    3. 需要缓冲池的场景。

    案例
    JDK里面的String设计:

    1. String str1 = "abc";
    2. String str2 = "ab"+"c";
    3. str1 == str2 //true

    这里面的string都是常量池里面。直接复用,不会创建新的对象。