¡¶JAVAÓëģʽ¡·µÚ22Ìì¨D±¸Íü¼ģʽ (ËÄ)

2014-11-24 08:31:52 ¡¤ ×÷Õß: ¡¤ ä¯ÀÀ: 3
ator o = new Originator();
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 states;
// ¼ì²éµãÖ¸Êý
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 states;
// ¼ì²éµãÖ¸Êý
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 states;
private int index;

/**
* ¹¹Ô캯Êý
*/
public Memento(List states, int index) {
this.states = new ArrayList(states);
this.index = index;
}

pu