mirror of
https://github.com/CyC2018/Interview-Notebook.git
synced 2026-11-01 03:23:42 +00:00
Update 设计模式 - 生成器.md
在“实现”小节补充 StringBuilder 实现说明与多参数类 Builder 实践,并对参考文献进行文字校对。
This commit is contained in:
+4
-2
@@ -7,7 +7,7 @@
|
||||
<div align="center"> <img src="pics/dp-builder.png" width="760px"/> </div><br>
|
||||
|
||||
### 实现
|
||||
以下是一个简易的 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.
|
||||
|
||||
Reference in New Issue
Block a user