From 13257b8b33072ae820aadb4fa9731614bfe8b8d7 Mon Sep 17 00:00:00 2001 From: Ilkka Seppala Date: Fri, 22 Aug 2014 21:31:08 +0300 Subject: [PATCH] added memento sample --- memento/pom.xml | 23 +++++++ memento/src/main/java/com/iluwatar/App.java | 30 +++++++++ memento/src/main/java/com/iluwatar/Star.java | 63 +++++++++++++++++++ .../main/java/com/iluwatar/StarMemento.java | 5 ++ .../com/iluwatar/StarMementoInternal.java | 27 ++++++++ .../src/main/java/com/iluwatar/StarType.java | 36 +++++++++++ pom.xml | 1 + 7 files changed, 185 insertions(+) create mode 100644 memento/pom.xml create mode 100644 memento/src/main/java/com/iluwatar/App.java create mode 100644 memento/src/main/java/com/iluwatar/Star.java create mode 100644 memento/src/main/java/com/iluwatar/StarMemento.java create mode 100644 memento/src/main/java/com/iluwatar/StarMementoInternal.java create mode 100644 memento/src/main/java/com/iluwatar/StarType.java diff --git a/memento/pom.xml b/memento/pom.xml new file mode 100644 index 000000000..f578a0a7f --- /dev/null +++ b/memento/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.0-SNAPSHOT + + com.iluwatar + memento + 1.0-SNAPSHOT + memento + http://maven.apache.org + + + junit + junit + 3.8.1 + test + + + diff --git a/memento/src/main/java/com/iluwatar/App.java b/memento/src/main/java/com/iluwatar/App.java new file mode 100644 index 000000000..7ee027c2d --- /dev/null +++ b/memento/src/main/java/com/iluwatar/App.java @@ -0,0 +1,30 @@ +package com.iluwatar; + +import java.util.Stack; + +public class App +{ + public static void main( String[] args ) + { + Stack states = new Stack<>(); + + Star star = new Star(StarType.SUN, 10000000, 500000); + System.out.println(star); + states.add(star.getMemento()); + star.timePasses(); + System.out.println(star); + states.add(star.getMemento()); + star.timePasses(); + System.out.println(star); + states.add(star.getMemento()); + star.timePasses(); + System.out.println(star); + states.add(star.getMemento()); + star.timePasses(); + System.out.println(star); + while (states.size() > 0) { + star.setMemento(states.pop()); + System.out.println(star); + } + } +} diff --git a/memento/src/main/java/com/iluwatar/Star.java b/memento/src/main/java/com/iluwatar/Star.java new file mode 100644 index 000000000..90c1028fd --- /dev/null +++ b/memento/src/main/java/com/iluwatar/Star.java @@ -0,0 +1,63 @@ +package com.iluwatar; + +public class Star { + + private StarType type; + private int ageYears; + private int massTons; + + public Star(StarType startType, int startAge, int startMass) { + this.type = startType; + this.ageYears = startAge; + this.massTons = startMass; + } + + public void timePasses() { + ageYears *= 2; + massTons *= 8; + switch (type) { + case RED_GIANT: + type = StarType.WHITE_DWARF; + break; + case SUN: + type = StarType.RED_GIANT; + break; + case SUPERNOVA: + type = StarType.DEAD; + break; + case WHITE_DWARF: + type = StarType.SUPERNOVA; + break; + case DEAD: + ageYears *= 2; + massTons = 0; + break; + default: + break; + } + } + + StarMemento getMemento() { + + StarMementoInternal state = new StarMementoInternal(); + state.setAgeYears(ageYears); + state.setMassTons(massTons); + state.setType(type); + return state; + + } + + void setMemento(StarMemento memento) { + + StarMementoInternal state = (StarMementoInternal) memento; + this.type = state.getType(); + this.ageYears = state.getAgeYears(); + this.massTons = state.getMassTons(); + + } + + @Override + public String toString() { + return String.format("%s age: %d years mass: %d tons", type.toString(), ageYears, massTons); + } +} diff --git a/memento/src/main/java/com/iluwatar/StarMemento.java b/memento/src/main/java/com/iluwatar/StarMemento.java new file mode 100644 index 000000000..cc7238d12 --- /dev/null +++ b/memento/src/main/java/com/iluwatar/StarMemento.java @@ -0,0 +1,5 @@ +package com.iluwatar; + +public interface StarMemento { + +} diff --git a/memento/src/main/java/com/iluwatar/StarMementoInternal.java b/memento/src/main/java/com/iluwatar/StarMementoInternal.java new file mode 100644 index 000000000..dd0e2c343 --- /dev/null +++ b/memento/src/main/java/com/iluwatar/StarMementoInternal.java @@ -0,0 +1,27 @@ +package com.iluwatar; + +public class StarMementoInternal implements StarMemento { + + private StarType type; + private int ageYears; + private int massTons; + + public StarType getType() { + return type; + } + public void setType(StarType type) { + this.type = type; + } + public int getAgeYears() { + return ageYears; + } + public void setAgeYears(int ageYears) { + this.ageYears = ageYears; + } + public int getMassTons() { + return massTons; + } + public void setMassTons(int massTons) { + this.massTons = massTons; + } +} diff --git a/memento/src/main/java/com/iluwatar/StarType.java b/memento/src/main/java/com/iluwatar/StarType.java new file mode 100644 index 000000000..54b352184 --- /dev/null +++ b/memento/src/main/java/com/iluwatar/StarType.java @@ -0,0 +1,36 @@ +package com.iluwatar; + +public enum StarType { + + SUN, + RED_GIANT, + WHITE_DWARF, + SUPERNOVA, + DEAD; + + @Override + public String toString() { + String s = ""; + switch (this) { + case RED_GIANT: + s = "red giant"; + break; + case SUN: + s = "sun"; + break; + case SUPERNOVA: + s = "supernova"; + break; + case WHITE_DWARF: + s = "white dwarf"; + break; + case DEAD: + s = "dead star"; + break; + default: + break; + } + return s; + } + +} diff --git a/pom.xml b/pom.xml index a717a68f1..50debda49 100644 --- a/pom.xml +++ b/pom.xml @@ -35,6 +35,7 @@ interpreter iterator mediator + memento