diff --git a/pom.xml b/pom.xml index de4bd0ed8..298732fd5 100644 --- a/pom.xml +++ b/pom.xml @@ -39,6 +39,7 @@ <module>observer</module> <module>state</module> <module>strategy</module> + <module>template-method</module> </modules> <build> diff --git a/template-method/pom.xml b/template-method/pom.xml new file mode 100644 index 000000000..90fde692d --- /dev/null +++ b/template-method/pom.xml @@ -0,0 +1,23 @@ +<?xml version="1.0"?> +<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.iluwatar</groupId> + <artifactId>java-design-patterns</artifactId> + <version>1.0-SNAPSHOT</version> + </parent> + <groupId>com.iluwatar</groupId> + <artifactId>template-method</artifactId> + <version>1.0-SNAPSHOT</version> + <name>template-method</name> + <url>http://maven.apache.org</url> + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>3.8.1</version> + <scope>test</scope> + </dependency> + </dependencies> +</project> diff --git a/template-method/src/main/java/com/iluwatar/App.java b/template-method/src/main/java/com/iluwatar/App.java new file mode 100644 index 000000000..7360eddf6 --- /dev/null +++ b/template-method/src/main/java/com/iluwatar/App.java @@ -0,0 +1,12 @@ +package com.iluwatar; + +public class App +{ + public static void main( String[] args ) + { + HalflingThief thief = new HalflingThief(new HitAndRunMethod()); + thief.steal(); + thief.changeMethod(new SubtleMethod()); + thief.steal(); + } +} diff --git a/template-method/src/main/java/com/iluwatar/HalflingThief.java b/template-method/src/main/java/com/iluwatar/HalflingThief.java new file mode 100644 index 000000000..64604a8b2 --- /dev/null +++ b/template-method/src/main/java/com/iluwatar/HalflingThief.java @@ -0,0 +1,18 @@ +package com.iluwatar; + +public class HalflingThief { + + private StealingMethod method; + + public HalflingThief(StealingMethod method) { + this.method = method; + } + + public void steal() { + method.steal(); + } + + public void changeMethod(StealingMethod method) { + this.method = method; + } +} diff --git a/template-method/src/main/java/com/iluwatar/HitAndRunMethod.java b/template-method/src/main/java/com/iluwatar/HitAndRunMethod.java new file mode 100644 index 000000000..99c0d61d1 --- /dev/null +++ b/template-method/src/main/java/com/iluwatar/HitAndRunMethod.java @@ -0,0 +1,20 @@ +package com.iluwatar; + +public class HitAndRunMethod extends StealingMethod { + + @Override + protected String pickTarget() { + return "old goblin woman"; + } + + @Override + protected void confuseTarget(String target) { + System.out.println("Approach the " + target + " from behind."); + } + + @Override + protected void stealTheItem(String target) { + System.out.println("Grab the handbag and run away fast!"); + } + +} diff --git a/template-method/src/main/java/com/iluwatar/StealingMethod.java b/template-method/src/main/java/com/iluwatar/StealingMethod.java new file mode 100644 index 000000000..f24de7588 --- /dev/null +++ b/template-method/src/main/java/com/iluwatar/StealingMethod.java @@ -0,0 +1,17 @@ +package com.iluwatar; + +public abstract class StealingMethod { + + protected abstract String pickTarget(); + + protected abstract void confuseTarget(String target); + + protected abstract void stealTheItem(String target); + + public void steal() { + String target = pickTarget(); + System.out.println("The target has been chosen as " + target + "."); + confuseTarget(target); + stealTheItem(target); + } +} diff --git a/template-method/src/main/java/com/iluwatar/SubtleMethod.java b/template-method/src/main/java/com/iluwatar/SubtleMethod.java new file mode 100644 index 000000000..8967a92d6 --- /dev/null +++ b/template-method/src/main/java/com/iluwatar/SubtleMethod.java @@ -0,0 +1,20 @@ +package com.iluwatar; + +public class SubtleMethod extends StealingMethod { + + @Override + protected String pickTarget() { + return "shop keeper"; + } + + @Override + protected void confuseTarget(String target) { + System.out.println("Approach the " + target + " with tears running and hug him!"); + } + + @Override + protected void stealTheItem(String target) { + System.out.println("While in close contact grab the " + target + "'s wallet."); + } + +}