diff --git a/README.md b/README.md index e96158526..55b396b0e 100644 --- a/README.md +++ b/README.md @@ -353,7 +353,7 @@ A programming idiom is a means of expressing a recurring construct in one or mor ## Memento [↑](#list-of-design-patterns) **Intent:** Without violating encapsulation, capture and externalize an object's internal state so that the object can be restored to this state later. -![alt text](https://github.com/iluwatar/java-design-patterns/blob/master/memento/etc/memento_1.png "Memento") +![alt text](https://github.com/iluwatar/java-design-patterns/blob/master/memento/etc/memento.png "Memento") **Applicability:** Use the Memento pattern when * a snapshot of an object's state must be saved so that it can be restored to that state later, and diff --git a/memento/etc/memento.jpg b/memento/etc/memento.jpg deleted file mode 100644 index 0b9f89cbd..000000000 Binary files a/memento/etc/memento.jpg and /dev/null differ diff --git a/memento/etc/memento.png b/memento/etc/memento.png new file mode 100644 index 000000000..dcfe7a749 Binary files /dev/null and b/memento/etc/memento.png differ diff --git a/memento/etc/test.ucls b/memento/etc/memento.ucls similarity index 68% rename from memento/etc/test.ucls rename to memento/etc/memento.ucls index 5c29ef69d..a9455cbbe 100644 --- a/memento/etc/test.ucls +++ b/memento/etc/memento.ucls @@ -1,65 +1,65 @@ - + - + - - - - - - - - - + - - + - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + - - + + diff --git a/memento/etc/memento_1.png b/memento/etc/memento_1.png deleted file mode 100644 index f34e5f356..000000000 Binary files a/memento/etc/memento_1.png and /dev/null differ diff --git a/memento/src/main/java/com/iluwatar/Star.java b/memento/src/main/java/com/iluwatar/Star.java index 196290768..52b76d53b 100644 --- a/memento/src/main/java/com/iluwatar/Star.java +++ b/memento/src/main/java/com/iluwatar/Star.java @@ -1,69 +1,105 @@ -package com.iluwatar; - -/** - * - * Star uses "mementos" to store and restore state. - * - */ -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); - } -} +package com.iluwatar; + +/** + * + * Star uses "mementos" to store and restore state. + * + */ +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); + } + + /** + * + * StarMemento implementation + * + */ + private static 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/StarMementoInternal.java b/memento/src/main/java/com/iluwatar/StarMementoInternal.java deleted file mode 100644 index 9962b79fb..000000000 --- a/memento/src/main/java/com/iluwatar/StarMementoInternal.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.iluwatar; - -/** - * - * Internal interface to memento. - * - */ -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; - } -}