Skip to content

Commit 13257b8

Browse files
committed
added memento sample
1 parent 128aff2 commit 13257b8

File tree

7 files changed

+185
-0
lines changed

7 files changed

+185
-0
lines changed

memento/pom.xml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0"?>
2+
<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"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<groupId>com.iluwatar</groupId>
7+
<artifactId>java-design-patterns</artifactId>
8+
<version>1.0-SNAPSHOT</version>
9+
</parent>
10+
<groupId>com.iluwatar</groupId>
11+
<artifactId>memento</artifactId>
12+
<version>1.0-SNAPSHOT</version>
13+
<name>memento</name>
14+
<url>http://maven.apache.org</url>
15+
<dependencies>
16+
<dependency>
17+
<groupId>junit</groupId>
18+
<artifactId>junit</artifactId>
19+
<version>3.8.1</version>
20+
<scope>test</scope>
21+
</dependency>
22+
</dependencies>
23+
</project>
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.iluwatar;
2+
3+
import java.util.Stack;
4+
5+
public class App
6+
{
7+
public static void main( String[] args )
8+
{
9+
Stack<StarMemento> states = new Stack<>();
10+
11+
Star star = new Star(StarType.SUN, 10000000, 500000);
12+
System.out.println(star);
13+
states.add(star.getMemento());
14+
star.timePasses();
15+
System.out.println(star);
16+
states.add(star.getMemento());
17+
star.timePasses();
18+
System.out.println(star);
19+
states.add(star.getMemento());
20+
star.timePasses();
21+
System.out.println(star);
22+
states.add(star.getMemento());
23+
star.timePasses();
24+
System.out.println(star);
25+
while (states.size() > 0) {
26+
star.setMemento(states.pop());
27+
System.out.println(star);
28+
}
29+
}
30+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package com.iluwatar;
2+
3+
public class Star {
4+
5+
private StarType type;
6+
private int ageYears;
7+
private int massTons;
8+
9+
public Star(StarType startType, int startAge, int startMass) {
10+
this.type = startType;
11+
this.ageYears = startAge;
12+
this.massTons = startMass;
13+
}
14+
15+
public void timePasses() {
16+
ageYears *= 2;
17+
massTons *= 8;
18+
switch (type) {
19+
case RED_GIANT:
20+
type = StarType.WHITE_DWARF;
21+
break;
22+
case SUN:
23+
type = StarType.RED_GIANT;
24+
break;
25+
case SUPERNOVA:
26+
type = StarType.DEAD;
27+
break;
28+
case WHITE_DWARF:
29+
type = StarType.SUPERNOVA;
30+
break;
31+
case DEAD:
32+
ageYears *= 2;
33+
massTons = 0;
34+
break;
35+
default:
36+
break;
37+
}
38+
}
39+
40+
StarMemento getMemento() {
41+
42+
StarMementoInternal state = new StarMementoInternal();
43+
state.setAgeYears(ageYears);
44+
state.setMassTons(massTons);
45+
state.setType(type);
46+
return state;
47+
48+
}
49+
50+
void setMemento(StarMemento memento) {
51+
52+
StarMementoInternal state = (StarMementoInternal) memento;
53+
this.type = state.getType();
54+
this.ageYears = state.getAgeYears();
55+
this.massTons = state.getMassTons();
56+
57+
}
58+
59+
@Override
60+
public String toString() {
61+
return String.format("%s age: %d years mass: %d tons", type.toString(), ageYears, massTons);
62+
}
63+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.iluwatar;
2+
3+
public interface StarMemento {
4+
5+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.iluwatar;
2+
3+
public class StarMementoInternal implements StarMemento {
4+
5+
private StarType type;
6+
private int ageYears;
7+
private int massTons;
8+
9+
public StarType getType() {
10+
return type;
11+
}
12+
public void setType(StarType type) {
13+
this.type = type;
14+
}
15+
public int getAgeYears() {
16+
return ageYears;
17+
}
18+
public void setAgeYears(int ageYears) {
19+
this.ageYears = ageYears;
20+
}
21+
public int getMassTons() {
22+
return massTons;
23+
}
24+
public void setMassTons(int massTons) {
25+
this.massTons = massTons;
26+
}
27+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.iluwatar;
2+
3+
public enum StarType {
4+
5+
SUN,
6+
RED_GIANT,
7+
WHITE_DWARF,
8+
SUPERNOVA,
9+
DEAD;
10+
11+
@Override
12+
public String toString() {
13+
String s = "";
14+
switch (this) {
15+
case RED_GIANT:
16+
s = "red giant";
17+
break;
18+
case SUN:
19+
s = "sun";
20+
break;
21+
case SUPERNOVA:
22+
s = "supernova";
23+
break;
24+
case WHITE_DWARF:
25+
s = "white dwarf";
26+
break;
27+
case DEAD:
28+
s = "dead star";
29+
break;
30+
default:
31+
break;
32+
}
33+
return s;
34+
}
35+
36+
}

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
<module>interpreter</module>
3636
<module>iterator</module>
3737
<module>mediator</module>
38+
<module>memento</module>
3839
</modules>
3940

4041
<build>

0 commit comments

Comments
 (0)