Functional approach to Strategy pattern
The Strategy pattern example should include Java 8 specific solution.

For inspiration, read this: http://alvinalexander.com/scala/how-scala-killed-oop-strategy-design-pattern

strategy/src/main/java/com/iluwatar/strategy/App.java strategy/src/main/java/com/iluwatar/strategy/DragonSlayingStrategy.java
strategy/src/main/java/com/iluwatar/strategy/App.java strategy/src/main/java/com/iluwatar/strategy/DragonSlayingStrategy.java
diff --git a/strategy/src/main/java/com/iluwatar/strategy/App.java b/strategy/src/main/java/com/iluwatar/strategy/App.java
index 272e56cf9e51..e2bcfef8a35e 100644
--- a/strategy/src/main/java/com/iluwatar/strategy/App.java
+++ b/strategy/src/main/java/com/iluwatar/strategy/App.java
@@ -5,6 +5,10 @@
  * The Strategy pattern (also known as the policy pattern) is a software design pattern that enables
  * an algorithm's behavior to be selected at runtime.
  * <p>
+ * Before Java 8 the Strategies needed to be separate classes forcing the developer
+ * to write lots of boilerplate code. With modern Java it is easy to pass behavior
+ * with method references and lambdas making the code shorter and more readable.
+ * <p>
  * In this example ({@link DragonSlayingStrategy}) encapsulates an algorithm. The containing object
  * ({@link DragonSlayer}) can alter its behavior by changing its strategy.
  * 
@@ -17,6 +21,7 @@ public class App {
    * @param args command line args
    */
   public static void main(String[] args) {
+    // GoF Strategy pattern
     System.out.println("Green dragon spotted ahead!");
     DragonSlayer dragonSlayer = new DragonSlayer(new MeleeStrategy());
     dragonSlayer.goToBattle();
@@ -26,5 +31,19 @@ public static void main(String[] args) {
     System.out.println("Black dragon lands before you.");
     dragonSlayer.changeStrategy(new SpellStrategy());
     dragonSlayer.goToBattle();
+
+    // Java 8 Strategy pattern
+    System.out.println("Green dragon spotted ahead!");
+    dragonSlayer = new DragonSlayer(
+        () -> System.out.println("With your Excalibur you severe the dragon's head!"));
+    dragonSlayer.goToBattle();
+    System.out.println("Red dragon emerges.");
+    dragonSlayer.changeStrategy(() -> System.out.println(
+        "You shoot the dragon with the magical crossbow and it falls dead on the ground!"));
+    dragonSlayer.goToBattle();
+    System.out.println("Black dragon lands before you.");
+    dragonSlayer.changeStrategy(() -> System.out.println(
+        "You cast the spell of disintegration and the dragon vaporizes in a pile of dust!"));
+    dragonSlayer.goToBattle();
   }
 }
diff --git a/strategy/src/main/java/com/iluwatar/strategy/DragonSlayingStrategy.java b/strategy/src/main/java/com/iluwatar/strategy/DragonSlayingStrategy.java
index e17e5fbf00bf..aa57c34f0fc0 100644
--- a/strategy/src/main/java/com/iluwatar/strategy/DragonSlayingStrategy.java
+++ b/strategy/src/main/java/com/iluwatar/strategy/DragonSlayingStrategy.java
@@ -5,6 +5,7 @@
  * Strategy interface.
  * 
  */
+@FunctionalInterface
 public interface DragonSlayingStrategy {
 
   void execute();
