diff --git a/pom.xml b/pom.xml index 130772858..de4bd0ed8 100644 --- a/pom.xml +++ b/pom.xml @@ -38,6 +38,7 @@ memento observer state + strategy diff --git a/strategy/pom.xml b/strategy/pom.xml new file mode 100644 index 000000000..d1d8b9176 --- /dev/null +++ b/strategy/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.0-SNAPSHOT + + com.iluwatar + strategy + 1.0-SNAPSHOT + strategy + http://maven.apache.org + + + junit + junit + 3.8.1 + test + + + diff --git a/strategy/src/main/java/com/iluwatar/App.java b/strategy/src/main/java/com/iluwatar/App.java new file mode 100644 index 000000000..bc3c4ad48 --- /dev/null +++ b/strategy/src/main/java/com/iluwatar/App.java @@ -0,0 +1,17 @@ +package com.iluwatar; + +public class App +{ + public static void main( String[] args ) + { + System.out.println("Green dragon spotted ahead!"); + DragonSlayer dragonSlayer = new DragonSlayer(new MeleeStrategy()); + dragonSlayer.goToBattle(); + System.out.println("Red dragon emerges."); + dragonSlayer.changeStrategy(new ProjectileStrategy()); + dragonSlayer.goToBattle(); + System.out.println("Black dragon lands before you."); + dragonSlayer.changeStrategy(new SpellStrategy()); + dragonSlayer.goToBattle(); + } +} diff --git a/strategy/src/main/java/com/iluwatar/DragonSlayer.java b/strategy/src/main/java/com/iluwatar/DragonSlayer.java new file mode 100644 index 000000000..7e58a9f8e --- /dev/null +++ b/strategy/src/main/java/com/iluwatar/DragonSlayer.java @@ -0,0 +1,18 @@ +package com.iluwatar; + +public class DragonSlayer { + + private DragonSlayingStrategy strategy; + + public DragonSlayer(DragonSlayingStrategy strategy) { + this.strategy = strategy; + } + + public void changeStrategy(DragonSlayingStrategy strategy) { + this.strategy = strategy; + } + + public void goToBattle() { + strategy.execute(); + } +} diff --git a/strategy/src/main/java/com/iluwatar/DragonSlayingStrategy.java b/strategy/src/main/java/com/iluwatar/DragonSlayingStrategy.java new file mode 100644 index 000000000..214ae7089 --- /dev/null +++ b/strategy/src/main/java/com/iluwatar/DragonSlayingStrategy.java @@ -0,0 +1,7 @@ +package com.iluwatar; + +public interface DragonSlayingStrategy { + + void execute(); + +} diff --git a/strategy/src/main/java/com/iluwatar/MeleeStrategy.java b/strategy/src/main/java/com/iluwatar/MeleeStrategy.java new file mode 100644 index 000000000..49c06e826 --- /dev/null +++ b/strategy/src/main/java/com/iluwatar/MeleeStrategy.java @@ -0,0 +1,10 @@ +package com.iluwatar; + +public class MeleeStrategy implements DragonSlayingStrategy { + + @Override + public void execute() { + System.out.println("With your Excalibur you severe the dragon's head!"); + } + +} diff --git a/strategy/src/main/java/com/iluwatar/ProjectileStrategy.java b/strategy/src/main/java/com/iluwatar/ProjectileStrategy.java new file mode 100644 index 000000000..37c4a14cc --- /dev/null +++ b/strategy/src/main/java/com/iluwatar/ProjectileStrategy.java @@ -0,0 +1,10 @@ +package com.iluwatar; + +public class ProjectileStrategy implements DragonSlayingStrategy { + + @Override + public void execute() { + System.out.println("You shoot the dragon with the magical crossbow and it falls dead on the ground!"); + } + +} diff --git a/strategy/src/main/java/com/iluwatar/SpellStrategy.java b/strategy/src/main/java/com/iluwatar/SpellStrategy.java new file mode 100644 index 000000000..3dab04329 --- /dev/null +++ b/strategy/src/main/java/com/iluwatar/SpellStrategy.java @@ -0,0 +1,10 @@ +package com.iluwatar; + +public class SpellStrategy implements DragonSlayingStrategy { + + @Override + public void execute() { + System.out.println("You cast the spell of disintegration and the dragon vaporizes in a pile of dust!"); + } + +}