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

2014-11-24 08:31:52 ¡¤ ×÷Õß: ¡¤ ä¯ÀÀ: 15

±¸Íü¼ģʽÓÖ½Ð×ö¿ìÕÕģʽ(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