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!");
+ }
+
+}