diff --git a/design-patterns/pom.xml b/design-patterns/pom.xml
new file mode 100644
index 0000000..5b8f4dd
--- /dev/null
+++ b/design-patterns/pom.xml
@@ -0,0 +1,23 @@
+
+
+
+ code
+ com.perye
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ design-patterns
+ pom
+
+ strategy
+
+
+
+ 8
+ 8
+
+
+
\ No newline at end of file
diff --git a/design-patterns/strategy/pom.xml b/design-patterns/strategy/pom.xml
new file mode 100644
index 0000000..a4b2c76
--- /dev/null
+++ b/design-patterns/strategy/pom.xml
@@ -0,0 +1,19 @@
+
+
+
+ design-patterns
+ com.perye
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ strategy
+
+
+ 8
+ 8
+
+
+
\ No newline at end of file
diff --git a/design-patterns/strategy/src/main/java/com/perye/Main.java b/design-patterns/strategy/src/main/java/com/perye/Main.java
new file mode 100644
index 0000000..bdc0b5d
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/Main.java
@@ -0,0 +1,8 @@
+package com.perye;
+
+public class Main {
+
+ public static void main(String[] args) {
+ System.out.println("策略模式");
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/duck/DuckMain.java b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/DuckMain.java
new file mode 100644
index 0000000..88241c9
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/DuckMain.java
@@ -0,0 +1,16 @@
+package com.perye.strategy.duck;
+
+import com.perye.strategy.duck.behavior.fly.FlyRocketPowered;
+import com.perye.strategy.duck.entity.Duck;
+import com.perye.strategy.duck.entity.MallardDuck;
+
+public class DuckMain {
+
+ public static void main(String[] args) {
+ Duck duck = new MallardDuck();
+ duck.setFlyBehavior(new FlyRocketPowered());
+ duck.display();
+ duck.performFly();
+ duck.performQuack();
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/fly/FlyBehavior.java b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/fly/FlyBehavior.java
new file mode 100644
index 0000000..b30711d
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/fly/FlyBehavior.java
@@ -0,0 +1,10 @@
+package com.perye.strategy.duck.behavior.fly;
+
+/**
+ * 飞行
+ */
+public interface FlyBehavior {
+
+ void fly();
+
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/fly/FlyNoWay.java b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/fly/FlyNoWay.java
new file mode 100644
index 0000000..2e91962
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/fly/FlyNoWay.java
@@ -0,0 +1,8 @@
+package com.perye.strategy.duck.behavior.fly;
+
+public class FlyNoWay implements FlyBehavior {
+ @Override
+ public void fly() {
+ System.out.println("什么都不做,不会飞");
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/fly/FlyRocketPowered.java b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/fly/FlyRocketPowered.java
new file mode 100644
index 0000000..53ec6c9
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/fly/FlyRocketPowered.java
@@ -0,0 +1,9 @@
+package com.perye.strategy.duck.behavior.fly;
+
+public class FlyRocketPowered implements FlyBehavior {
+
+ @Override
+ public void fly() {
+ System.out.println("FlyRocketPowered");
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/fly/FlyWithWings.java b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/fly/FlyWithWings.java
new file mode 100644
index 0000000..6f04148
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/fly/FlyWithWings.java
@@ -0,0 +1,8 @@
+package com.perye.strategy.duck.behavior.fly;
+
+public class FlyWithWings implements FlyBehavior {
+ @Override
+ public void fly() {
+ System.out.println("实现鸭子飞行");
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/quack/MuteQuack.java b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/quack/MuteQuack.java
new file mode 100644
index 0000000..cc8e2a7
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/quack/MuteQuack.java
@@ -0,0 +1,8 @@
+package com.perye.strategy.duck.behavior.quack;
+
+public class MuteQuack implements QuackBehavior {
+ @Override
+ public void quack() {
+ System.out.println("什么都不做,不会叫");
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/quack/Quack.java b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/quack/Quack.java
new file mode 100644
index 0000000..2502767
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/quack/Quack.java
@@ -0,0 +1,8 @@
+package com.perye.strategy.duck.behavior.quack;
+
+public class Quack implements QuackBehavior {
+ @Override
+ public void quack() {
+ System.out.println("实现鸭子呱呱叫");
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/quack/QuackBehavior.java b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/quack/QuackBehavior.java
new file mode 100644
index 0000000..955532e
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/quack/QuackBehavior.java
@@ -0,0 +1,10 @@
+package com.perye.strategy.duck.behavior.quack;
+
+/**
+ * 叫声
+ */
+public interface QuackBehavior {
+
+ void quack();
+
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/quack/Squeak.java b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/quack/Squeak.java
new file mode 100644
index 0000000..50c6958
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/behavior/quack/Squeak.java
@@ -0,0 +1,8 @@
+package com.perye.strategy.duck.behavior.quack;
+
+public class Squeak implements QuackBehavior {
+ @Override
+ public void quack() {
+ System.out.println("橡皮鸭子吱吱叫");
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/duck/entity/DecoyDuck.java b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/entity/DecoyDuck.java
new file mode 100644
index 0000000..ec2bdc2
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/entity/DecoyDuck.java
@@ -0,0 +1,17 @@
+package com.perye.strategy.duck.entity;
+
+import com.perye.strategy.duck.behavior.fly.FlyNoWay;
+import com.perye.strategy.duck.behavior.quack.MuteQuack;
+
+public class DecoyDuck extends Duck {
+
+ public DecoyDuck() {
+ quackBehavior = new MuteQuack();
+ flyBehavior = new FlyNoWay();
+ }
+
+ @Override
+ public void display() {
+ System.out.println("display--DecoyDuck");
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/duck/entity/Duck.java b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/entity/Duck.java
new file mode 100644
index 0000000..7ebc4e8
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/entity/Duck.java
@@ -0,0 +1,36 @@
+package com.perye.strategy.duck.entity;
+
+import com.perye.strategy.duck.behavior.fly.FlyBehavior;
+import com.perye.strategy.duck.behavior.quack.QuackBehavior;
+
+/**
+ * 鸭子超类
+ */
+public abstract class Duck {
+
+ FlyBehavior flyBehavior;
+
+ QuackBehavior quackBehavior;
+
+ public void performQuack() {
+ quackBehavior.quack();
+ }
+
+ public void performFly() {
+ flyBehavior.fly();
+ }
+
+ public void swim() {
+ System.out.println("swim");
+ }
+
+ public abstract void display();
+
+ public void setFlyBehavior(FlyBehavior flyBehavior) {
+ this.flyBehavior = flyBehavior;
+ }
+
+ public void setQuackBehavior(QuackBehavior quackBehavior) {
+ this.quackBehavior = quackBehavior;
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/duck/entity/MallardDuck.java b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/entity/MallardDuck.java
new file mode 100644
index 0000000..8950175
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/entity/MallardDuck.java
@@ -0,0 +1,17 @@
+package com.perye.strategy.duck.entity;
+
+import com.perye.strategy.duck.behavior.fly.FlyWithWings;
+import com.perye.strategy.duck.behavior.quack.Quack;
+
+public class MallardDuck extends Duck {
+
+ public MallardDuck() {
+ quackBehavior = new Quack();
+ flyBehavior = new FlyWithWings();
+ }
+
+ @Override
+ public void display() {
+ System.out.println("display--MallardDuck");
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/duck/entity/ModelDuck.java b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/entity/ModelDuck.java
new file mode 100644
index 0000000..e1b1927
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/entity/ModelDuck.java
@@ -0,0 +1,17 @@
+package com.perye.strategy.duck.entity;
+
+import com.perye.strategy.duck.behavior.fly.FlyNoWay;
+import com.perye.strategy.duck.behavior.quack.Quack;
+
+public class ModelDuck extends Duck {
+
+ public ModelDuck() {
+ flyBehavior = new FlyNoWay();
+ quackBehavior = new Quack();
+ }
+
+ @Override
+ public void display() {
+ System.out.println("display--ModelDuck");
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/duck/entity/RedheadDuck.java b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/entity/RedheadDuck.java
new file mode 100644
index 0000000..f9fe2a1
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/entity/RedheadDuck.java
@@ -0,0 +1,17 @@
+package com.perye.strategy.duck.entity;
+
+import com.perye.strategy.duck.behavior.fly.FlyWithWings;
+import com.perye.strategy.duck.behavior.quack.Quack;
+
+public class RedheadDuck extends Duck {
+
+ public RedheadDuck() {
+ quackBehavior = new Quack();
+ flyBehavior = new FlyWithWings();
+ }
+
+ @Override
+ public void display() {
+ System.out.println("display--RedheadDuck");
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/duck/entity/RubberDuck.java b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/entity/RubberDuck.java
new file mode 100644
index 0000000..1bad2e2
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/duck/entity/RubberDuck.java
@@ -0,0 +1,17 @@
+package com.perye.strategy.duck.entity;
+
+import com.perye.strategy.duck.behavior.fly.FlyWithWings;
+import com.perye.strategy.duck.behavior.quack.Squeak;
+
+public class RubberDuck extends Duck {
+
+ public RubberDuck() {
+ quackBehavior = new Squeak();
+ flyBehavior = new FlyWithWings();
+ }
+
+ @Override
+ public void display() {
+ System.out.println("display--RubberDuck");
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/WeaponMain.java b/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/WeaponMain.java
new file mode 100644
index 0000000..c22fb3a
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/WeaponMain.java
@@ -0,0 +1,18 @@
+package com.perye.strategy.weapon;
+
+import com.perye.strategy.weapon.behavior.AxeBehavior;
+import com.perye.strategy.weapon.behavior.BowAndArrowBehavior;
+import com.perye.strategy.weapon.entity.Character;
+import com.perye.strategy.weapon.entity.King;
+
+public class WeaponMain {
+
+ public static void main(String[] args) {
+ Character character = new King();
+ character.fight();
+ character.setWeaponBehavior(new AxeBehavior());
+ character.performFight();
+ character.setWeaponBehavior(new BowAndArrowBehavior());
+ character.performFight();
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/behavior/AxeBehavior.java b/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/behavior/AxeBehavior.java
new file mode 100644
index 0000000..feb369a
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/behavior/AxeBehavior.java
@@ -0,0 +1,8 @@
+package com.perye.strategy.weapon.behavior;
+
+public class AxeBehavior implements WeaponBehavior{
+ @Override
+ public void useWeapon() {
+ System.out.println("用斧头");
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/behavior/BowAndArrowBehavior.java b/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/behavior/BowAndArrowBehavior.java
new file mode 100644
index 0000000..83a59fb
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/behavior/BowAndArrowBehavior.java
@@ -0,0 +1,8 @@
+package com.perye.strategy.weapon.behavior;
+
+public class BowAndArrowBehavior implements WeaponBehavior{
+ @Override
+ public void useWeapon() {
+ System.out.println("弓箭射击");
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/behavior/KnifeBehavior.java b/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/behavior/KnifeBehavior.java
new file mode 100644
index 0000000..a3c6826
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/behavior/KnifeBehavior.java
@@ -0,0 +1,8 @@
+package com.perye.strategy.weapon.behavior;
+
+public class KnifeBehavior implements WeaponBehavior{
+ @Override
+ public void useWeapon() {
+ System.out.println("匕首");
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/behavior/SwordBehavior.java b/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/behavior/SwordBehavior.java
new file mode 100644
index 0000000..c464d96
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/behavior/SwordBehavior.java
@@ -0,0 +1,8 @@
+package com.perye.strategy.weapon.behavior;
+
+public class SwordBehavior implements WeaponBehavior{
+ @Override
+ public void useWeapon() {
+ System.out.println("用剑");
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/behavior/WeaponBehavior.java b/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/behavior/WeaponBehavior.java
new file mode 100644
index 0000000..fbc4210
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/behavior/WeaponBehavior.java
@@ -0,0 +1,7 @@
+package com.perye.strategy.weapon.behavior;
+
+public interface WeaponBehavior {
+
+ void useWeapon();
+
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/entity/Character.java b/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/entity/Character.java
new file mode 100644
index 0000000..6eeec80
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/entity/Character.java
@@ -0,0 +1,18 @@
+package com.perye.strategy.weapon.entity;
+
+import com.perye.strategy.weapon.behavior.WeaponBehavior;
+
+public abstract class Character {
+
+ WeaponBehavior weaponBehavior;
+
+ public abstract void fight();
+
+ public void performFight(){
+ weaponBehavior.useWeapon();
+ }
+
+ public void setWeaponBehavior(WeaponBehavior weaponBehavior) {
+ this.weaponBehavior = weaponBehavior;
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/entity/King.java b/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/entity/King.java
new file mode 100644
index 0000000..eb4d9a0
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/entity/King.java
@@ -0,0 +1,8 @@
+package com.perye.strategy.weapon.entity;
+
+public class King extends Character{
+ @Override
+ public void fight() {
+ System.out.println("king");
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/entity/Knight.java b/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/entity/Knight.java
new file mode 100644
index 0000000..b6a928c
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/entity/Knight.java
@@ -0,0 +1,8 @@
+package com.perye.strategy.weapon.entity;
+
+public class Knight extends Character{
+ @Override
+ public void fight() {
+ System.out.println("Knight");
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/entity/Queen.java b/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/entity/Queen.java
new file mode 100644
index 0000000..ee6d5ed
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/entity/Queen.java
@@ -0,0 +1,9 @@
+package com.perye.strategy.weapon.entity;
+
+public class Queen extends Character {
+
+ @Override
+ public void fight() {
+ System.out.println("Queen");
+ }
+}
diff --git a/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/entity/Troll.java b/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/entity/Troll.java
new file mode 100644
index 0000000..cbd5d75
--- /dev/null
+++ b/design-patterns/strategy/src/main/java/com/perye/strategy/weapon/entity/Troll.java
@@ -0,0 +1,8 @@
+package com.perye.strategy.weapon.entity;
+
+public class Troll extends Character{
+ @Override
+ public void fight() {
+ System.out.println("Troll");
+ }
+}
diff --git a/pom.xml b/pom.xml
index bad9a45..eeb5c57 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,6 +12,7 @@
demo
core
leetcode
+ design-patterns