added memento sample
This commit is contained in:
		
							
								
								
									
										30
									
								
								memento/src/main/java/com/iluwatar/App.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								memento/src/main/java/com/iluwatar/App.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
package com.iluwatar;
 | 
			
		||||
 | 
			
		||||
import java.util.Stack;
 | 
			
		||||
 | 
			
		||||
public class App 
 | 
			
		||||
{
 | 
			
		||||
    public static void main( String[] args )
 | 
			
		||||
    {
 | 
			
		||||
    	Stack<StarMemento> 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);
 | 
			
		||||
    	}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										63
									
								
								memento/src/main/java/com/iluwatar/Star.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								memento/src/main/java/com/iluwatar/Star.java
									
									
									
									
									
										Normal file
									
								
							@@ -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);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										5
									
								
								memento/src/main/java/com/iluwatar/StarMemento.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								memento/src/main/java/com/iluwatar/StarMemento.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
package com.iluwatar;
 | 
			
		||||
 | 
			
		||||
public interface StarMemento {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										27
									
								
								memento/src/main/java/com/iluwatar/StarMementoInternal.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								memento/src/main/java/com/iluwatar/StarMementoInternal.java
									
									
									
									
									
										Normal file
									
								
							@@ -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;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										36
									
								
								memento/src/main/java/com/iluwatar/StarType.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								memento/src/main/java/com/iluwatar/StarType.java
									
									
									
									
									
										Normal file
									
								
							@@ -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;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user