diff --git a/notes/设计模式 - 生成器.md b/notes/设计模式 - 生成器.md index e65d153f..e74c7ad2 100644 --- a/notes/设计模式 - 生成器.md +++ b/notes/设计模式 - 生成器.md @@ -7,7 +7,7 @@

### 实现 -以下是一个简易的 StringBuilder 实现,参考了 JDK 1.8 源码。 +以下是一个简易的 StringBuilder 实现,参考了 JDK 1.8 源码(JDK 9 起 value 改为 byte[],扩容仍是原容量 × 2 + 2)。每次 append() 是一个构造步骤,返回 this 以便链式调用,最后由 toString() 得到最终的 String。 ```java import java.util.Arrays; @@ -79,6 +79,8 @@ public class Client { abcdefghijklmnopqrstuvwxyz ``` +实际开发中更常见的是为参数很多的类提供生成器,例如 new User.Builder("tom").age(18).email("tom@example.com").build():比一串重载的构造方法更易读,可选参数按需设置,并且可以在 build() 中统一校验,再创建不可变的对象。 + ### JDK 中的应用 - [java.lang.StringBuilder](http://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html) - [java.nio.ByteBuffer](http://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html#put-byte-) @@ -89,4 +91,4 @@ abcdefghijklmnopqrstuvwxyz ## 参考资料 - 弗里曼. Head First 设计模式 [M]. 中国电力出版社, 2007. -- Gamma E. 设计模式: 可复用面向对象软件的基础 [M]. 机械工业出版社, 2007. +- Gamma E. 设计模式:可复用面向对象软件的基础 [M]. 机械工业出版社, 2007.