return this.memento;
}
/**
* ±¸Íü¼µÄ¸³Öµ·½·¨
*/
public void saveMemento(Memento memento) {
this.memento = memento;
}
}
package com.bankht.Memento;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-2 ÏÂÎç04:13:03
*
* @Àà˵Ã÷ £º¸ºÔðÈ˽ÇÉ«À࣬¸ºÔðÈ˽ÇÉ«¸ºÔ𱣴汸Íü¼¶ÔÏ󣬵«ÊÇ´Ó²»Ð޸ģ¨ÉõÖÁ²»²é¿´£©±¸Íü¼¶ÔÏóµÄÄÚÈÝ¡£
*/
public class Caretaker {
private Memento memento;
/**
* ±¸Íü¼µÄȡֵ·½·¨
*/
public Memento retrieveMemento() {
return this.memento;
}
/**
* ±¸Íü¼µÄ¸³Öµ·½·¨
*/
public void saveMemento(Memento memento) {
this.memento = memento;
}
}
¡¡¡¡¿Í»§¶Ë½ÇÉ«Àà
[java]
package com.bankht.Memento;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-2 ÏÂÎç04:13:24
*
* @Àà˵Ã÷ £º¿Í»§¶Ë½ÇÉ«Àà
*/
public class Client {
public static void main(String[] args) {
Originator o = new Originator();
Caretaker c = new Caretaker();
// ¸Ä±ä¸ºÔðÈ˶ÔÏóµÄ״̬
o.setState("On");
// ´´½¨±¸Íü¼¶ÔÏ󣬲¢½«·¢ÆðÈ˶ÔÏóµÄ״̬´¢´æÆðÀ´
c.saveMemento(o.createMemento());
// Ð޸ķ¢ÆðÈ˵Ä״̬
o.setState("Off");
// »Ö¸´·¢ÆðÈ˶ÔÏóµÄ״̬
o.restoreMemento(c.retrieveMemento());
System.out.println(o.getState());
}
}
package com.bankht.Memento;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-2 ÏÂÎç04:13:24
*
* @Àà˵Ã÷ £º¿Í»§¶Ë½ÇÉ«Àà
*/
public class Client {
public static void main(String[] args) {
Originator o = new Originator();
Caretaker c = new Caretaker();
// ¸Ä±ä¸ºÔðÈ˶ÔÏóµÄ״̬
o.setState("On");
// ´´½¨±¸Íü¼¶ÔÏ󣬲¢½«·¢ÆðÈ˶ÔÏóµÄ״̬´¢´æÆðÀ´
c.saveMemento(o.createMemento());
// Ð޸ķ¢ÆðÈ˵Ä״̬
o.setState("Off");
// »Ö¸´·¢ÆðÈ˶ÔÏóµÄ״̬
o.restoreMemento(c.retrieveMemento());
System.out.println(o.getState());
}
}
¡¡¡¡ÔÚÉÏÃæµÄÕâ¸öʾÒâÐԵĿͻ§¶Ë½ÇÉ«ÀïÃæ£¬Ê×ÏȽ«·¢ÆðÈ˶ÔÏóµÄ״̬ÉèÖóɡ°On¡±£¬²¢´´½¨Ò»¸ö±¸Íü¼¶ÔÏó½«Õâ¸ö״̬´æ´¢ÆðÀ´£»È»ºó½«·¢ÆðÈ˶ÔÏóµÄ״̬¸Ä³É¡°Off¡±£»×îºóÓÖ½«·¢ÆðÈ˶ÔÏó»Ö¸´µ½±¸Íü¼¶ÔÏóËù´æ´¢ÆðÀ´µÄ״̬£¬¼´¡°On¡±×´Ì¬¡£
¡¡¡¡ÏµÍ³µÄʱÐòͼ¸üÄܹ»·´Ó³³öϵͳ¸÷¸ö½ÇÉ«±»µ÷ÓõÄʱ¼ä˳Ðò¡£ÈçÏÂͼÊǽ«·¢ÆðÈ˶ÔÏóµÄ״̬´æ´¢µ½°×Ï䱸Íü¼¶ÔÏóÖÐÈ¥µÄʱÐòͼ¡£

¡¡¡¡¿ÉÒÔ¿´³öϵͳÔËÐеÄʱÐòÊÇÕâÑùµÄ£º
¡¡¡¡£¨1£©½«·¢ÆðÈ˶ÔÏóµÄ״̬ÉèÖóɡ°On¡±¡£
¡¡¡¡£¨2£©µ÷Ó÷¢ÆðÈ˽ÇÉ«µÄcreateMemento()·½·¨£¬´´½¨Ò»¸ö±¸Íü¼¶ÔÏó½«Õâ¸ö״̬´æ´¢ÆðÀ´¡£
¡¡¡¡£¨3£©½«±¸Íü¼¶ÔÏó´æ´¢µ½¸ºÔðÈ˶ÔÏóÖÐÈ¥¡£
¡¡¡¡½«·¢ÆðÈ˶ÔÏó»Ö¸´µ½±¸Íü¼¶ÔÏóËù¼Ç¼µÄ״̬µÄʱÐòͼÈçÏÂËùʾ£º

¡¡¡¡¿ÉÒÔ¿´³ö£¬½«·¢ÆðÈ˶ÔÏó»Ö¸´µ½±¸Íü¼¶ÔÏóËù¼Ç¼µÄ״̬ʱ£¬ÏµÍ³µÄÔËÐÐʱÐòÊÇÕâÑùµÄ£º
¡¡¡¡£¨1£©½«·¢ÆðÈË״̬ÉèÖóɡ°Off¡±¡£
¡¡¡¡£¨2£©½«±¸Íü¼¶ÔÏó´Ó¸ºÔðÈ˶ÔÏóÖÐÈ¡³ö¡£
¡¡¡¡£¨3£©½«·¢ÆðÈ˶ÔÏó»Ö¸´µ½±¸Íü¼¶ÔÏóËù´æ´¢ÆðÀ´µÄ״̬£¬¼´¡°On¡±×´Ì¬¡£
¡¡¡°ºÚÏ䡱±¸Íü¼ģʽµÄʵÏÖ
¡¡¡¡±¸Íü¼½ÇÉ«¶Ô·¢ÆðÈË£¨Originator£©½ÇÉ«¶ÔÏóÌṩһ¸ö¿í½Ó¿Ú£¬¶øÎªÆäËû¶ÔÏóÌṩһ¸öÕ½Ó¿Ú¡£ÕâÑùµÄʵÏÖ½Ð×ö¡°ºÚÏäʵÏÖ¡±¡£
¡¡¡¡ÔÚJAVAÓïÑÔÖУ¬ÊµÏÖË«ÖØ½Ó¿ÚµÄ°ì·¨¾ÍÊǽ«±¸Íü¼½ÇÉ«ÀàÉè¼Æ³É·¢ÆðÈ˽ÇÉ«ÀàµÄÄÚ²¿³ÉÔ±Àà¡£
¡¡¡¡½«MementoÉè³ÉOriginatorÀàµÄÄÚ²¿À࣬´Ó¶ø½«Memento¶ÔÏó·â×°ÔÚOriginatorÀïÃæ£»ÔÚÍⲿÌṩһ¸ö±êʶ½Ó¿ÚMementoIF¸øCaretakerÒÔ¼°ÆäËû¶ÔÏó¡£ÕâÑù£¬OriginatorÀà¿´µ½µÄÊÇMenmentoµÄËùÓнӿڣ¬¶øCaretakerÒÔ¼°ÆäËû¶ÔÏó¿´µ½µÄ½ö½öÊDZêʶ½Ó¿ÚMementoIFËù±©Â¶³öÀ´µÄ½Ó¿Ú¡£
¡¡¡¡Ê¹ÓÃÄÚ²¿ÀàʵÏÖ±¸Íü¼ģʽµÄÀàͼÈçÏÂËùʾ¡£

¡¡¡¡Ô´´úÂë
¡¡¡¡·¢ÆðÈ˽ÇÉ«ÀàOriginatorÖж¨ÒåÁËÒ»¸öÄÚ²¿µÄMementoÀà¡£ÓÉÓÚ´ËMementoÀàµÄÈ«²¿½Ó¿Ú¶¼ÊÇ˽Óеģ¬Òò´ËÖ»ÓÐËü×Ô¼ººÍ·¢ÆðÈËÀà¿ÉÒÔµ÷Óá£
[java]
package com.bankht.Memento.sample2;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-2 ÏÂÎç04:33:55
*
* @Àà˵Ã÷
* £º·¢ÆðÈ˽ÇÉ«ÀàOriginatorÖж¨ÒåÁËÒ»¸öÄÚ²¿µÄMementoÀà¡£
* ÓÉÓÚ´ËMementoÀàµÄÈ«²¿½Ó¿Ú¶¼ÊÇ˽Óеģ¬Òò´ËÖ»ÓÐËü×Ô¼ººÍ·¢ÆðÈËÀà¿ÉÒÔµ÷Óá£
*/
public class Originator {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
System.out.println("¸³Öµ×´Ì¬£º" + state);
}
/**
* ¹¤³§·½·¨£¬·µ»¹Ò»¸öеı¸Íü¼¶ÔÏó
*/
public MementoIF createMemento() {
return new Memento(state);
}
/**
* ·¢ÆðÈ˻ָ´µ½±¸Íü¼¶ÔÏó¼Ç¼µÄ״̬
*/
public void restoreMemento(MementoIF memento) {
this.setState(((Memento) memento).getState());
}
private class Memento implements MementoIF {
private String state;
/**