±¸Íü¼ģʽÓÖ½Ð×ö¿ìÕÕģʽ(Snapshot Pattern)»òTokenģʽ£¬ÊǶÔÏóµÄÐÐΪģʽ¡£
¡¡¡¡±¸Íü¼¶ÔÏóÊÇÒ»¸öÓÃÀ´´æ´¢ÁíÍâÒ»¸ö¶ÔÏóÄÚ²¿×´Ì¬µÄ¿ìÕյĶÔÏó¡£±¸Íü¼ģʽµÄÓÃÒâÊÇÔÚ²»ÆÆ»µ·â×°µÄÌõ¼þÏ£¬½«Ò»¸ö¶ÔÏóµÄ״̬²¶×½(Capture)ס£¬²¢Íⲿ»¯£¬´æ´¢ÆðÀ´£¬´Ó¶ø¿ÉÒÔÔÚ½«À´ºÏÊʵÄʱºò°ÑÕâ¸ö¶ÔÏó»¹Ôµ½´æ´¢ÆðÀ´µÄ״̬¡£±¸Íü¼ģʽ³£³£ÓëÃüÁîģʽºÍµü´ú×ÓģʽһͬʹÓá£
±¸Íü¼ģʽµÄ½á¹¹
¡¡¡¡±¸Íü¼ģʽµÄ½á¹¹Í¼ÈçÏÂËùʾ

¡¡¡¡±¸Íü¼ģʽËùÉæ¼°µÄ½ÇÉ«ÓÐÈý¸ö£º±¸Íü¼(Memento)½ÇÉ«¡¢·¢ÆðÈË(Originator)½ÇÉ«¡¢¸ºÔðÈË(Caretaker)½ÇÉ«¡£
¡¡¡¡±¸Íü¼(Memento)½ÇÉ«
¡¡¡¡±¸Íü¼½ÇÉ«ÓÖÈçÏÂÔðÈΣº
¡¡¡¡£¨1£©½«·¢ÆðÈË£¨Originator£©¶ÔÏóµÄÄÚս״̬´æ´¢ÆðÀ´¡£±¸Íü¼¿ÉÒÔ¸ù¾Ý·¢ÆðÈ˶ÔÏóµÄÅжÏÀ´¾ö¶¨´æ´¢¶àÉÙ·¢ÆðÈË£¨Originator£©¶ÔÏóµÄÄÚ²¿×´Ì¬¡£
¡¡¡¡£¨2£©±¸Íü¼¿ÉÒÔ±£»¤ÆäÄÚÈݲ»±»·¢ÆðÈË£¨Originator£©¶ÔÏóÖ®ÍâµÄÈκζÔÏóËù¶ÁÈ¡¡£
¡¡¡¡±¸Íü¼ÓÐÁ½¸öµÈЧµÄ½Ó¿Ú£º
¡¡¡¡¡ñ¡¡¡¡Õ½Ó¿Ú£º¸ºÔðÈË£¨Caretaker£©¶ÔÏó£¨ºÍÆäËû³ý·¢ÆðÈ˶ÔÏóÖ®ÍâµÄÈκζÔÏ󣩿´µ½µÄÊDZ¸Íü¼µÄÕ½Ó¿Ú(narrow interface)£¬Õâ¸öÕ½Ó¿ÚÖ»ÔÊÐíËü°Ñ±¸Íü¼¶ÔÏ󴫸øÆäËûµÄ¶ÔÏó¡£
¡¡¡¡¡ñ¡¡¡¡¿í½Ó¿Ú£ºÓ븺ÔðÈ˶ÔÏó¿´µ½µÄÕ½Ó¿ÚÏà·´µÄÊÇ£¬·¢ÆðÈ˶ÔÏó¿ÉÒÔ¿´µ½Ò»¸ö¿í½Ó¿Ú(wide interface)£¬Õâ¸ö¿í½Ó¿ÚÔÊÐíËü¶ÁÈ¡ËùÓеÄÊý¾Ý£¬ÒÔ±ã¸ù¾ÝÕâЩÊý¾Ý»Ö¸´Õâ¸ö·¢ÆðÈ˶ÔÏóµÄÄÚ²¿×´Ì¬¡£
¡¡¡¡·¢ÆðÈË£¨Originator£©½ÇÉ«
¡¡¡¡·¢ÆðÈ˽ÇÉ«ÓÐÈçÏÂÔðÈΣº
¡¡¡¡£¨1£©´´½¨Ò»¸öº¬Óе±Ç°µÄÄÚ²¿×´Ì¬µÄ±¸Íü¼¶ÔÏó¡£
¡¡¡¡£¨2£©Ê¹Óñ¸Íü¼¶ÔÏó´æ´¢ÆäÄÚ²¿×´Ì¬¡£
¡¡¡¡¸ºÔðÈË£¨Caretaker£©½ÇÉ«
¡¡¡¡¸ºÔðÈ˽ÇÉ«ÓÐÈçÏÂÔðÈΣº
¡¡¡¡£¨1£©¸ºÔ𱣴汸Íü¼¶ÔÏó¡£
¡¡¡¡£¨2£©²»¼ì²é±¸Íü¼¶ÔÏóµÄÄÚÈÝ¡£
¡¡¡°°×Ï䡱±¸Íü¼ģʽµÄʵÏÖ
¡¡¡¡±¸Íü¼½ÇÉ«¶ÔÈκζÔÏó¶¼Ìṩһ¸ö½Ó¿Ú£¬¼´¿í½Ó¿Ú£¬±¸Íü¼½ÇÉ«µÄÄÚ²¿Ëù´æ´¢µÄ״̬¾Í¶ÔËùÓжÔÏ󹫿ª¡£Òò´ËÕâ¸öʵÏÖÓÖ½Ð×ö¡°°×ÏäʵÏÖ¡±¡£
¡¡¡¡¡°°×Ï䡱ʵÏÖ½«·¢ÆðÈ˽ÇÉ«µÄ״̬´æ´¢ÔÚÒ»¸ö´ó¼Ò¶¼¿´µÃµ½µÄµØ·½£¬Òò´ËÊÇÆÆ»µ·â×°ÐԵġ£µ«ÊÇͨ¹ý³ÌÐòÔ±×ÔÂÉ£¬Í¬Ñù¿ÉÒÔÔÚÒ»¶¨³Ì¶ÈÉÏʵÏÖģʽµÄ´ó²¿·ÖÓÃÒâ¡£Òò´Ë°×ÏäʵÏÖÈÔÈ»ÊÇÓÐÒâÒåµÄ¡£
¡¡¡¡ÏÂÃæ¸ø³öÒ»¸öʾÒâÐԵġ°°×ÏäʵÏÖ¡±¡£

¡¡¡¡Ô´´úÂë
¡¡¡¡·¢ÆðÈ˽ÇÉ«À࣬·¢ÆðÈ˽ÇÉ«ÀûÓÃÒ»¸öд´½¨µÄ±¸Íü¼¶ÔÏó½«×Ô¼ºµÄÄÚ²¿×´Ì¬´æ´¢ÆðÀ´¡£
[java]
package com.bankht.Memento;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-2 ÏÂÎç04:12:20
*
* @Àà˵Ã÷ £º·¢ÆðÈ˽ÇÉ«À࣬·¢ÆðÈ˽ÇÉ«ÀûÓÃÒ»¸öд´½¨µÄ±¸Íü¼¶ÔÏó½«×Ô¼ºµÄÄÚ²¿×´Ì¬´æ´¢ÆðÀ´¡£
*/
public class Originator {
private String state;
/**
* ¹¤³§·½·¨£¬·µ»ØÒ»¸öеı¸Íü¼¶ÔÏó
*/
public Memento createMemento() {
return new Memento(state);
}
/**
* ½«·¢ÆðÈ˻ָ´µ½±¸Íü¼¶ÔÏóËù¼ÇÔØµÄ״̬
*/
public void restoreMemento(Memento memento) {
this.state = memento.getState();
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
System.out.println("µ±Ç°×´Ì¬£º" + this.state);
}
}
package com.bankht.Memento;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-2 ÏÂÎç04:12:20
*
* @Àà˵Ã÷ £º·¢ÆðÈ˽ÇÉ«À࣬·¢ÆðÈ˽ÇÉ«ÀûÓÃÒ»¸öд´½¨µÄ±¸Íü¼¶ÔÏó½«×Ô¼ºµÄÄÚ²¿×´Ì¬´æ´¢ÆðÀ´¡£
*/
public class Originator {
private String state;
/**
* ¹¤³§·½·¨£¬·µ»ØÒ»¸öеı¸Íü¼¶ÔÏó
*/
public Memento createMemento() {
return new Memento(state);
}
/**
* ½«·¢ÆðÈ˻ָ´µ½±¸Íü¼¶ÔÏóËù¼ÇÔØµÄ״̬
*/
public void restoreMemento(Memento memento) {
this.state = memento.getState();
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
System.out.println("µ±Ç°×´Ì¬£º" + this.state);
}
}
¡¡¡¡±¸Íü¼½ÇÉ«À࣬±¸Íü¼¶ÔÏ󽫷¢ÆðÈ˶ÔÏó´«ÈëµÄ״̬´æ´¢ÆðÀ´¡£
[java]
package com.bankht.Memento;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-2 ÏÂÎç04:12:40
*
* @Àà˵Ã÷ £º±¸Íü¼½ÇÉ«À࣬±¸Íü¼¶ÔÏ󽫷¢ÆðÈ˶ÔÏó´«ÈëµÄ״̬´æ´¢ÆðÀ´¡£
*/
public class Memento {
private String state;
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
package com.bankht.Memento;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-2 ÏÂÎç04:12:40
*
* @Àà˵Ã÷ £º±¸Íü¼½ÇÉ«À࣬±¸Íü¼¶ÔÏ󽫷¢ÆðÈ˶ÔÏó´«ÈëµÄ״̬´æ´¢ÆðÀ´¡£
*/
public class Memento {
private String state;
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
¡¡¡¡¸ºÔðÈ˽ÇÉ«À࣬¸ºÔðÈ˽ÇÉ«¸ºÔ𱣴汸Íü¼¶ÔÏ󣬵«ÊÇ´Ó²»Ð޸ģ¨ÉõÖÁ²»²é¿´£©±¸Íü¼¶ÔÏóµÄÄÚÈÝ¡£
[java]
package com.bankht.Memento;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-2 ÏÂÎç04:13:03
*
* @Àà˵Ã÷ £º¸ºÔðÈ˽ÇÉ«À࣬¸ºÔðÈ˽ÇÉ«¸ºÔ𱣴汸Íü¼¶ÔÏ󣬵«ÊÇ´Ó²»Ð޸ģ¨ÉõÖÁ²»²é¿´£©±¸Íü¼¶ÔÏóµÄÄÚÈÝ¡£
*/
public class Caretaker {
private Memento memento;
/**
* ±¸Íü¼µÄȡֵ·½·¨
*/
p