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

2014-11-24 08:31:52 ¡¤ ×÷Õß: ¡¤ ä¯ÀÀ: 9
ublic Memento retrieveMemento() {
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;

/**