Caretaker c = new Caretaker();
// ¸Ä±ä¸ºÔðÈ˶ÔÏóµÄ״̬
o.setState("On");
// ´´½¨±¸Íü¼¶ÔÏ󣬲¢½«·¢ÆðÈ˶ÔÏóµÄ״̬´æ´¢ÆðÀ´
c.saveMemento(o.createMemento());
// Ð޸ķ¢ÆðÈ˶ÔÏóµÄ״̬
o.setState("Off");
// »Ö¸´·¢ÆðÈ˶ÔÏóµÄ״̬
o.restoreMemento(c.retrieveMemento());
}
}
¡¡¡¡¿Í»§¶ËÊ×ÏÈ
¡¡¡¡£¨1£©½«·¢ÆðÈ˶ÔÏóµÄ״̬ÉèÖÃΪ¡°On¡±¡£
¡¡¡¡£¨2£©µ÷ÓÃcreateMemento()·½·¨£¬´´½¨Ò»¸ö±¸Íü¼¶ÔÏó½«Õâ¸ö״̬´æ´¢ÆðÀ´£¨´ËʱcreateMemento()·½·¨»¹»ØµÄÃ÷ÏÔÀàÐÍÊÇMementoIF½Ó¿Ú£¬ÕæÊµÀàÐÍΪOriginatorÄÚ²¿µÄMemento¶ÔÏ󣩡£
¡¡¡¡£¨3£©½«±¸Íü¼¶ÔÏó´æ´¢µ½¸ºÔðÈ˶ÔÏóÖÐÈ¥¡£ÓÉÓÚ¸ºÔðÈ˶ÔÏóÄõ½µÄ½öÊÇMementoIF½Ó¿Ú£¬Òò´ËÎÞ·¨¶Á³ö±¸Íü¼¶ÔÏóÄÚ²¿µÄ״̬¡£
¡¡¡¡£¨4£©½«·¢ÆðÈ˶ÔÏóµÄ״̬ÉèÖÃΪ¡°Off¡±¡£
¡¡¡¡£¨5£©µ÷ÓøºÔðÈ˶ÔÏóµÄretrieveMemento()·½·¨½«±¸Íü¼¶ÔÏóÈ¡³ö¡£×¢Òâ´Ëʱ½öÄܵõ½MementoIF½Ó¿Ú£¬Òò´ËÎÞ·¨¶Á³ö´Ë¶ÔÏóµÄÄÚ²¿×´Ì¬¡£
¡¡¡¡£¨6£©µ÷Ó÷¢ÆðÈ˶ÔÏóµÄrestoreMemento()·½·¨½«·¢ÆðÈ˶ÔÏóµÄ״̬»Ö¸´³É±¸Íü¼¶ÔÏóËù´æ´¢µÄÆðÀ´µÄ״̬£¬¼´¡°On¡±×´Ì¬¡£ÓÉÓÚ·¢ÆðÈ˶ÔÏóµÄÄÚ²¿ÀàMementoʵÏÖÁËMementoIF½Ó¿Ú£¬Õâ¸öÄÚ²¿ÀàÊÇ´«ÈëµÄ±¸Íü¼¶ÔÏóµÄÕæÊµÀàÐÍ£¬Òò´Ë·¢ÆðÈ˶ÔÏó¿ÉÒÔÀûÓÃÄÚ²¿ÀàMementoµÄ˽ÓнӿڶÁ³ö´Ë¶ÔÏóµÄÄÚ²¿×´Ì¬¡£
¡¡¶àÖØ¼ì²éµã
¡¡¡¡Ç°ÃæËù¸ø³öµÄ°×ÏäºÍºÚÏäµÄʾÒâÐÔʵÏÖ¶¼ÊÇÖ»´æ´¢Ò»¸ö״̬µÄ¼òµ¥ÊµÏÖ£¬Ò²¿ÉÒÔ½Ð×öÖ»ÓÐÒ»¸ö¼ì²éµã¡£³£¼ûµÄϵͳÍùÍùÐèÒª´æ´¢²»Ö¹Ò»¸ö״̬£¬¶øÊÇÐèÒª´æ´¢¶à¸ö״̬£¬»òÕß½Ð×öÓжà¸ö¼ì²éµã¡£
¡¡¡¡±¸Íü¼ģʽ¿ÉÒÔ½«·¢ÆðÈ˶ÔÏóµÄ״̬´æ´¢µ½±¸Íü¼¶ÔÏóÀïÃæ£¬±¸Íü¼ģʽ¿ÉÒÔ½«·¢ÆðÈ˶ÔÏó»Ö¸´µ½±¸Íü¼¶ÔÏóËù´æ´¢µÄijһ¸ö¼ì²éµãÉÏ¡£ÏÂÃæ¸ø³öÒ»¸öʾÒâÐԵġ¢ÓжàÖØ¼ì²éµãµÄ±¸Íü¼ģʽµÄʵÏÖ¡£
¡¡¡¡Ô´´úÂë
¡¡¡¡·¢ÆðÈ˽ÇɫԴ´úÂë
[java]
package com.bankht.Memento.Multiple;
import java.util.ArrayList;
import java.util.List;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-2 ÏÂÎç04:55:00
*
* @Àà˵Ã÷ £º·¢ÆðÈ˽ÇɫԴ´úÂë
*/
public class Originator {
private List
// ¼ì²éµãÖ¸Êý
private int index;
/**
* ¹¹Ô캯Êý
*/
public Originator() {
states = new ArrayList
index = 0;
}
/**
* ¹¤³§·½·¨£¬·µ»¹Ò»¸öеı¸Íü¼¶ÔÏó
*/
public Memento createMemento() {
return new Memento(states, index);
}
/**
* ½«·¢ÆðÈ˻ָ´µ½±¸Íü¼¶ÔÏó¼Ç¼µÄ״̬ÉÏ
*/
public void restoreMemento(Memento memento) {
states = memento.getStates();
index = memento.getIndex();
}
/**
* ״̬µÄ¸³Öµ·½·¨
*/
public void setState(String state) {
states.add(state);
index++;
}
/**
* ¸¨Öú·½·¨£¬´òÓ¡ËùÓÐ״̬
*/
public void printStates() {
System.out.println("¼ì²éµã¹²ÓУº"+states.size()+"¸ö");
for (String state : states) {
System.out.println(state);
}
}
}
package com.bankht.Memento.Multiple;
import java.util.ArrayList;
import java.util.List;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-2 ÏÂÎç04:55:00
*
* @Àà˵Ã÷ £º·¢ÆðÈ˽ÇɫԴ´úÂë
*/
public class Originator {
private List
// ¼ì²éµãÖ¸Êý
private int index;
/**
* ¹¹Ô캯Êý
*/
public Originator() {
states = new ArrayList
index = 0;
}
/**
* ¹¤³§·½·¨£¬·µ»¹Ò»¸öеı¸Íü¼¶ÔÏó
*/
public Memento createMemento() {
return new Memento(states, index);
}
/**
* ½«·¢ÆðÈ˻ָ´µ½±¸Íü¼¶ÔÏó¼Ç¼µÄ״̬ÉÏ
*/
public void restoreMemento(Memento memento) {
states = memento.getStates();
index = memento.getIndex();
}
/**
* ״̬µÄ¸³Öµ·½·¨
*/
public void setState(String state) {
states.add(state);
index++;
}
/**
* ¸¨Öú·½·¨£¬´òÓ¡ËùÓÐ״̬
*/
public void printStates() {
System.out.println("¼ì²éµã¹²ÓУº"+states.size()+"¸ö");
for (String state : states) {
System.out.println(state);
}
}
}
¡¡¡¡±¸Íü¼½ÇÉ«À࣬Õâ¸öʵÏÖ¿ÉÒÔ´æ´¢ÈÎÒâ¶àµÄ״̬£¬Íâ½ç¿ÉÒÔʹÓüì²éµãÖ¸ÊýindexÀ´È¡³ö¼ì²éµãÉϵÄ״̬¡£¡¡
[java]
package com.bankht.Memento.Multiple;
import java.util.ArrayList;
import java.util.List;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-2 ÏÂÎç04:55:23
*
* @Àà˵Ã÷ £º±¸Íü¼½ÇÉ«À࣬Õâ¸öʵÏÖ¿ÉÒÔ´æ´¢ÈÎÒâ¶àµÄ״̬£¬Íâ½ç¿ÉÒÔʹÓüì²éµãÖ¸ÊýindexÀ´È¡³ö¼ì²éµãÉϵÄ״̬¡£¡¡¡¡
*/
public class Memento {
private List
private int index;
/**
* ¹¹Ô캯Êý
*/
public Memento(List
this.states = new ArrayList
this.index = index;
}
pu