diff --git a/pom.xml b/pom.xml index f42bd9b06..130772858 100644 --- a/pom.xml +++ b/pom.xml @@ -37,6 +37,7 @@ mediator memento observer + state diff --git a/state/pom.xml b/state/pom.xml new file mode 100644 index 000000000..ef9a30ff6 --- /dev/null +++ b/state/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.0-SNAPSHOT + + com.iluwatar + state + 1.0-SNAPSHOT + state + http://maven.apache.org + + + junit + junit + 3.8.1 + test + + + diff --git a/state/src/main/java/com/iluwatar/AngryState.java b/state/src/main/java/com/iluwatar/AngryState.java new file mode 100644 index 000000000..0a3de44e8 --- /dev/null +++ b/state/src/main/java/com/iluwatar/AngryState.java @@ -0,0 +1,21 @@ +package com.iluwatar; + +public class AngryState implements State { + + private Mammoth mammoth; + + public AngryState(Mammoth mammoth) { + this.mammoth = mammoth; + } + + @Override + public void observe() { + System.out.println(String.format("%s is furious!", mammoth)); + } + + @Override + public void onEnterState() { + System.out.println(String.format("%s gets angry!", mammoth)); + } + +} diff --git a/state/src/main/java/com/iluwatar/App.java b/state/src/main/java/com/iluwatar/App.java new file mode 100644 index 000000000..e0096c846 --- /dev/null +++ b/state/src/main/java/com/iluwatar/App.java @@ -0,0 +1,16 @@ +package com.iluwatar; + +public class App +{ + public static void main( String[] args ) + { + + Mammoth mammoth = new Mammoth(); + mammoth.observe(); + mammoth.timePasses(); + mammoth.observe(); + mammoth.timePasses(); + mammoth.observe(); + + } +} diff --git a/state/src/main/java/com/iluwatar/Mammoth.java b/state/src/main/java/com/iluwatar/Mammoth.java new file mode 100644 index 000000000..6f9f28b33 --- /dev/null +++ b/state/src/main/java/com/iluwatar/Mammoth.java @@ -0,0 +1,32 @@ +package com.iluwatar; + +public class Mammoth { + + private State state; + + public Mammoth() { + state = new PeacefulState(this); + } + + public void timePasses() { + if (state.getClass().equals(PeacefulState.class)) { + changeStateTo(new AngryState(this)); + } else { + changeStateTo(new PeacefulState(this)); + } + } + + private void changeStateTo(State newState) { + this.state = newState; + this.state.onEnterState(); + } + + @Override + public String toString() { + return "The mammoth"; + } + + public void observe() { + this.state.observe(); + } +} diff --git a/state/src/main/java/com/iluwatar/PeacefulState.java b/state/src/main/java/com/iluwatar/PeacefulState.java new file mode 100644 index 000000000..6d6179a8b --- /dev/null +++ b/state/src/main/java/com/iluwatar/PeacefulState.java @@ -0,0 +1,21 @@ +package com.iluwatar; + +public class PeacefulState implements State { + + private Mammoth mammoth; + + public PeacefulState(Mammoth mammoth) { + this.mammoth = mammoth; + } + + @Override + public void observe() { + System.out.println(String.format("%s is calm and peaceful.", mammoth)); + } + + @Override + public void onEnterState() { + System.out.println(String.format("%s calms down.", mammoth)); + } + +} diff --git a/state/src/main/java/com/iluwatar/State.java b/state/src/main/java/com/iluwatar/State.java new file mode 100644 index 000000000..cee5eda69 --- /dev/null +++ b/state/src/main/java/com/iluwatar/State.java @@ -0,0 +1,9 @@ +package com.iluwatar; + +public interface State { + + void onEnterState(); + + void observe(); + +}