From dc3c4cd4eea82a68a3b7443b90eb6a4e0d6f4d16 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Mon, 4 Jun 2018 17:10:20 +0800 Subject: [PATCH] auto commit --- notes/设计模式.md | 74 +++++++++++++++++- pics/4dc08713-f6fe-424c-a24c-ad5a993a941d.png | Bin 0 -> 16384 bytes 2 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 pics/4dc08713-f6fe-424c-a24c-ad5a993a941d.png 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 0000000000000000000000000000000000000000..8a0b1d3f2aba5d556a715562518001febd81f4ad GIT binary patch literal 16384 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 aQ@{W3^Z(!HpIP|+pBsq(KL7t|X80dzj(FSv literal 0 HcmV?d00001