From cd7926431ae291b9398f61d16fe7d1c86cfa8d25 Mon Sep 17 00:00:00 2001 From: CyC2018 Date: Fri, 30 Oct 2026 20:19:44 +0800 Subject: [PATCH] =?UTF-8?q?Update=20=E8=AE=BE=E8=AE=A1=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=20-=20=E7=94=9F=E6=88=90=E5=99=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在“实现”小节补充 StringBuilder 实现说明与多参数类 Builder 实践,并对参考文献进行文字校对。 --- notes/设计模式 - 生成器.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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.