diff --git a/notes/设计模式.md b/notes/设计模式.md
index 2189eb31..f0137d3a 100644
--- a/notes/设计模式.md
+++ b/notes/设计模式.md
@@ -451,7 +451,7 @@ public class Client {
### JDK
-- [java.lang.Object#clone()] (http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone%28%29)
+- [java.lang.Object#clone()](http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone%28%29)
# 三、行为型
@@ -621,7 +621,77 @@ public class Client {
### 意图
-定义一系列算法,封装每个算法,并使它们可以互换。策略可以让算法独立于使用它的客户端。
+定义一系列算法,封装每个算法,并使它们可以互换。
+
+策略模式可以让算法独立于使用它的客户端。
+
+### 类图
+
+- Strategy 接口定义了一个算法族,它们都具有 BehaviorInterface() 方法。
+- Context 是使用到该算法族的类,其中的 doSomething() 方法会调用 BehaviorInterface(),setStrategy(in Strategy) 方法可以动态地改变 strategy 对象,也就是说能动态地改变 Context 所使用的算法。
+
+
+
+### 实现
+
+设计一个鸭子,它可以动态地改变叫声。这里的算法族是鸭子的叫声行为。
+
+```java
+public interface QuackBehavior {
+ void quack();
+}
+```
+
+```java
+public class Quack implements QuackBehavior {
+ @Override
+ public void quack() {
+ System.out.println("quack!");
+ }
+}
+```
+
+```java
+public class Squeak implements QuackBehavior{
+ @Override
+ public void quack() {
+ System.out.println("squeak!");
+ }
+}
+```
+
+```java
+public class Duck {
+ private QuackBehavior quackBehavior;
+
+ public void performQuack() {
+ if (quackBehavior != null) {
+ quackBehavior.quack();
+ }
+ }
+
+ public void setQuackBehavior(QuackBehavior quackBehavior) {
+ this.quackBehavior = quackBehavior;
+ }
+}
+```
+
+```java
+public class Client {
+ public static void main(String[] args) {
+ Duck duck = new Duck();
+ duck.setQuackBehavior(new Squeak());
+ duck.performQuack();
+ duck.setQuackBehavior(new Quack());
+ duck.performQuack();
+ }
+}
+```
+
+```html
+squeak!
+quack!
+```
### JDK
diff --git a/pics/4dc08713-f6fe-424c-a24c-ad5a993a941d.png b/pics/4dc08713-f6fe-424c-a24c-ad5a993a941d.png
new file mode 100644
index 00000000..8a0b1d3f
Binary files /dev/null and b/pics/4dc08713-f6fe-424c-a24c-ad5a993a941d.png differ