mirror of
https://github.com/CyC2018/Interview-Notebook.git
synced 2026-10-31 19:13:42 +00:00
Update 设计模式 - 模板方法.md
补充模板方法与策略模式的对比说明,更新 JDK 中关于 InputStream 与 AQS 的应用示例,并完成参考资料的文字校对。
This commit is contained in:
@@ -89,8 +89,13 @@ pourInCup
|
||||
Tea.addCondiments
|
||||
```
|
||||
|
||||
prepareRecipe() 用 final 修饰,子类不能改变步骤和顺序,必须实现的只有 brew() 和 addCondiments() 这两个抽象步骤。
|
||||
|
||||
模板方法通过继承固定流程、替换其中的步骤,[策略](设计模式%20-%20策略.md)通过组合替换整个算法。
|
||||
|
||||
### JDK 中的应用
|
||||
- java.util.Collections#sort()
|
||||
InputStream#read(byte[], int, int) 是一个模板方法:它循环调用抽象的 read() 逐个读取字节,子类只实现读一个字节的 read() 就能批量读取。AQS(AbstractQueuedSynchronizer)也是这样:acquire() 固定了获取失败后排队、挂起的流程,子类(例如 ReentrantLock 内部的 FairSync、NonfairSync)只实现 tryAcquire(),见 [AQS](Java%20并发.md#七juc---aqs)。
|
||||
|
||||
- java.io.InputStream#skip()
|
||||
- java.io.InputStream#read(byte[], int, int)
|
||||
- java.util.AbstractList#indexOf()
|
||||
@@ -98,4 +103,4 @@ Tea.addCondiments
|
||||
## 参考资料
|
||||
|
||||
- 弗里曼. Head First 设计模式 [M]. 中国电力出版社, 2007.
|
||||
- Gamma E. 设计模式: 可复用面向对象软件的基础 [M]. 机械工业出版社, 2007.
|
||||
- Gamma E. 设计模式:可复用面向对象软件的基础 [M]. 机械工业出版社, 2007.
|
||||
|
||||
Reference in New Issue
Block a user