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