Files
java-design-patterns/memento/src/main/java/com/iluwatar/Star.java

70 lines
1.3 KiB
Java
Raw Normal View History

2014-08-22 21:31:08 +03:00
package com.iluwatar;
2014-08-31 11:13:50 +03:00
/**
*
* Star uses "mementos" to store and restore state.
*
2014-08-31 11:13:50 +03:00
*/
2014-08-22 21:31:08 +03:00
public class Star {
2014-08-22 21:31:08 +03:00
private StarType type;
private int ageYears;
private int massTons;
2014-08-22 21:31:08 +03:00
public Star(StarType startType, int startAge, int startMass) {
this.type = startType;
this.ageYears = startAge;
this.massTons = startMass;
}
2014-08-22 21:31:08 +03:00
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;
}
}
2014-08-22 21:31:08 +03:00
StarMemento getMemento() {
StarMementoInternal state = new StarMementoInternal();
state.setAgeYears(ageYears);
state.setMassTons(massTons);
state.setType(type);
return state;
2014-08-22 21:31:08 +03:00
}
2014-08-22 21:31:08 +03:00
void setMemento(StarMemento memento) {
2014-08-22 21:31:08 +03:00
StarMementoInternal state = (StarMementoInternal) memento;
this.type = state.getType();
this.ageYears = state.getAgeYears();
this.massTons = state.getMassTons();
2014-08-22 21:31:08 +03:00
}
2014-08-22 21:31:08 +03:00
@Override
public String toString() {
return String.format("%s age: %d years mass: %d tons", type.toString(),
ageYears, massTons);
2014-08-22 21:31:08 +03:00
}
}