diff --git a/notes/设计模式 - 装饰.md b/notes/设计模式 - 装饰.md
index 56e26a9c..28817446 100644
--- a/notes/设计模式 - 装饰.md
+++ b/notes/设计模式 - 装饰.md
@@ -4,7 +4,11 @@
为对象动态添加功能。
### 类图
-装饰者(Decorator)和具体组件(ConcreteComponent)都继承自组件(Component),具体组件的方法实现不需要依赖于其它对象,而装饰者组合了一个组件,这样它可以装饰其它装饰者或者具体组件。所谓装饰,就是把这个装饰者套在被装饰者之上,从而动态扩展被装饰者的功能。装饰者的方法有一部分是自己的,这属于它的功能,然后调用被装饰者的方法实现,从而也保留了被装饰者的功能。可以看到,具体组件应当是装饰层次的最低层,因为只有具体组件的方法实现不需要依赖于其它对象。
+装饰者(Decorator)和具体组件(ConcreteComponent)都继承自组件(Component),具体组件的方法实现不需要依赖于其它对象,而装饰者组合了一个组件,这样它可以装饰其它装饰者或者具体组件。
+
+所谓装饰,就是把这个装饰者套在被装饰者之上,从而动态扩展被装饰者的功能。装饰者的方法有一部分是自己的,这属于它的功能,然后调用被装饰者的方法实现,从而也保留了被装饰者的功能。
+
+具体组件应当是装饰层次的最低层,因为只有具体组件的方法实现不需要依赖于其它对象。
@@ -89,6 +93,8 @@ public class Client {
3.0
```
+装饰与[代理](设计模式%20-%20代理.md)的结构相似,区别在于目的:装饰为对象叠加功能,代理控制对对象的访问。
+
### 设计原则
类应该对扩展开放,对修改关闭:也就是添加新功能时不需要修改代码。饮料可以动态添加新的配料,而不需要去修改饮料的代码。
@@ -96,6 +102,8 @@ public class Client {
不可能把所有的类设计成都满足这一原则,应当把该原则应用于最有可能发生改变的地方。
### JDK 中的应用
+Java I/O 是装饰的典型用法,例如 new BufferedInputStream(new FileInputStream("a.txt")) 给文件流加上缓冲,再套一层 DataInputStream 就能按 int、long 读取。
+
- java.io.BufferedInputStream(InputStream)
- java.io.DataInputStream(InputStream)
- java.io.BufferedOutputStream(OutputStream)
@@ -105,4 +113,4 @@ public class Client {
## 参考资料
- 弗里曼. Head First 设计模式 [M]. 中国电力出版社, 2007.
-- Gamma E. 设计模式: 可复用面向对象软件的基础 [M]. 机械工业出版社, 2007.
+- Gamma E. 设计模式:可复用面向对象软件的基础 [M]. 机械工业出版社, 2007.