diff --git a/notes/设计模式.md b/notes/设计模式.md
index d8dd6dbb..185d461e 100644
--- a/notes/设计模式.md
+++ b/notes/设计模式.md
@@ -633,7 +633,95 @@ public class Client {
### 意图
-定义算法框架,并将一些步骤的实现延迟到子类。通过模板方法,子类可以重新定义算法的某些步骤,而不用改变算法的结构。
+定义算法框架,并将一些步骤的实现延迟到子类。
+
+通过模板方法,子类可以重新定义算法的某些步骤,而不用改变算法的结构。
+
+### 类图
+
+
+
+### 实现
+
+冲咖啡和冲茶都有类似的流程,但是某些步骤会有点不一样,要求复用那些相同步骤的代码。
+
+
+
+```java
+public abstract class CaffeineBeverage {
+
+ final void prepareRecipe() {
+ boilWater();
+ brew();
+ pourInCup();
+ addCondiments();
+ }
+
+ abstract void brew();
+
+ abstract void addCondiments();
+
+ void boilWater() {
+ System.out.println("boilWater");
+ }
+
+ void pourInCup() {
+ System.out.println("pourInCup");
+ }
+}
+```
+
+```java
+public class Coffee extends CaffeineBeverage{
+ @Override
+ void brew() {
+ System.out.println("Coffee.brew");
+ }
+
+ @Override
+ void addCondiments() {
+ System.out.println("Coffee.addCondiments");
+ }
+}
+```
+
+```java
+public class Tea extends CaffeineBeverage{
+ @Override
+ void brew() {
+ System.out.println("Tea.brew");
+ }
+
+ @Override
+ void addCondiments() {
+ System.out.println("Tea.addCondiments");
+ }
+}
+```
+
+```java
+public class Client {
+ public static void main(String[] args) {
+ CaffeineBeverage caffeineBeverage = new Coffee();
+ caffeineBeverage.prepareRecipe();
+ System.out.println("-----------");
+ caffeineBeverage = new Tea();
+ caffeineBeverage.prepareRecipe();
+ }
+}
+```
+
+```html
+boilWater
+Coffee.brew
+pourInCup
+Coffee.addCondiments
+-----------
+boilWater
+Tea.brew
+pourInCup
+Tea.addCondiments
+```
### JDK
diff --git a/pics/11236498-1417-46ce-a1b0-e10054256955.png b/pics/11236498-1417-46ce-a1b0-e10054256955.png
new file mode 100644
index 00000000..19cd1543
Binary files /dev/null and b/pics/11236498-1417-46ce-a1b0-e10054256955.png differ
diff --git a/pics/c3c1c0e8-3a78-4426-961f-b46dd0879dd8.png b/pics/c3c1c0e8-3a78-4426-961f-b46dd0879dd8.png
new file mode 100644
index 00000000..48e980fc
Binary files /dev/null and b/pics/c3c1c0e8-3a78-4426-961f-b46dd0879dd8.png differ