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

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

// ¸Ä±ä״̬
o.setState("state 0");
// ½¨Á¢Ò»¸ö¼ì²éµã
c.createMemento();
// ¸Ä±ä״̬
o.setState("state 1");
// ½¨Á¢Ò»¸ö¼ì²éµã
c.createMemento();
// ¸Ä±ä״̬
o.setState("state 2");
// ½¨Á¢Ò»¸ö¼ì²éµã
c.createMemento();
// ¸Ä±ä״̬
o.setState("state 3");
// ½¨Á¢Ò»¸ö¼ì²éµã
c.createMemento();
// ´òÓ¡³öËùÓмì²éµã
o.printStates();
System.out.println("-----------------»Ö¸´¼ì²éµã-----------------");
// »Ö¸´µ½µÚ¶þ¸ö¼ì²éµã
c.restoreMemento(2);
// ´òÓ¡³öËùÓмì²éµã
o.printStates();
}

}
¡¡ÔËÐнá¹ûÈçÏ£º

[html]
¼ì²éµã¹²ÓУº4¸ö
state 0
state 1
state 2
state 3
-----------------»Ö¸´¼ì²éµã-----------------
¼ì²éµã¹²ÓУº3¸ö
state 0
state 1
state 2
¼ì²éµã¹²ÓУº4¸ö
state 0
state 1
state 2
state 3
-----------------»Ö¸´¼ì²éµã-----------------
¼ì²éµã¹²ÓУº3¸ö
state 0
state 1
state 2

¡¡¡¡¿ÉÒÔ¿´³ö£¬¿Í»§¶Ë½Çɫͨ¹ý²»¶Ï¸Ä±ä·¢ÆðÈ˽ÇÉ«µÄ״̬£¬²¢½«Ö®´æ´¢ÔÚ±¸Íü¼ÀïÃæ¡£Í¨¹ýÖ¸Ã÷¼ì²éµãÖ¸Êý¿ÉÒÔ½«·¢ÆðÈ˽ÇÉ«»Ö¸´µ½ÏàÓ¦µÄ¼ì²éµãËù¶ÔÓ¦µÄ״̬ÉÏ¡£

¡¡¡¡½«·¢ÆðÈ˵Ä״̬´æ´¢µ½±¸Íü¼¶ÔÏóÖеĻÐòÁÐͼÈçÏ£º

\


¡¡¡¡ÏµÍ³ÔËÐеÄʱÐòÊÇÕâÑùµÄ£º

¡¡¡¡£¨1£©½«·¢ÆðÈ˶ÔÏóµÄ״̬ÉèÖóÉij¸öÓÐЧ״̬£»

¡¡¡¡£¨2£©µ÷ÓøºÔðÈ˽ÇÉ«µÄcreateMemento()·½·¨£¬¸ºÔðÈ˽ÇÉ«»á¸ºÔðµ÷Ó÷¢ÆðÈ˽ÇÉ«ºÍ±¸Íü¼½ÇÉ«£¬½«·¢ÆðÈ˶ÔÏóµÄ״̬´æ´¢ÆðÀ´¡£

¡¡¡¡½«·¢ÆðÈ˶ÔÏó»Ö¸´µ½Ä³Ò»¸ö±¸Íü¼¶ÔÏóµÄ¼ì²éµãµÄ»î¶¯ÐòÁÐͼÈçÏ£º

\


¡¡¡¡ÓÉÓÚ¸ºÔðÈ˽ÇÉ«µÄ¹¦Äܱ»ÔöÇ¿ÁË£¬Òò´Ë½«·¢ÆðÈ˶ÔÏó»Ö¸´µ½±¸Íü¼¶ÔÏóËù¼Ç¼µÄ״̬ʱ£¬ÏµÍ³ÔËÐеÄʱÐò±»¼ò»¯ÁË£º

¡¡¡¡£¨1£©µ÷ÓøºÔðÈ˽ÇÉ«µÄrestoreMemento()·½·¨£¬½«·¢ÆðÈ˻ָ´µ½Ä³¸ö¼ì²éµã¡£

¡¡¡°×ÔÊöÀúÊ·¡±Ä£Ê½
¡¡¡¡Ëùν¡°×ÔÊöÀúÊ·¡±Ä£Ê½(History-On-Self Pattern)ʵ¼ÊÉϾÍÊDZ¸Íü¼ģʽµÄÒ»¸ö±äÖÖ¡£ÔÚ±¸Íü¼ģʽÖУ¬·¢ÆðÈË(Originator)½ÇÉ«¡¢¸ºÔðÈË(Caretaker)½ÇÉ«ºÍ±¸Íü¼(Memento)½ÇÉ«¶¼ÊǶÀÁ¢µÄ½ÇÉ«¡£ËäÈ»ÔÚʵÏÖÉϱ¸Íü¼Àà¿ÉÒÔ³ÉΪ·¢ÆðÈËÀàµÄÄÚ²¿³ÉÔ±À࣬µ«ÊDZ¸Íü¼ÀàÈÔÈ»±£³Ö×÷Ϊһ¸ö½ÇÉ«µÄ¶ÀÁ¢ÒâÒå¡£ÔÚ¡°×ÔÊöÀúÊ·¡±Ä£Ê½ÀïÃæ£¬·¢ÆðÈ˽ÇÉ«×Ô¼º¼æÈθºÔðÈ˽ÇÉ«¡£

¡¡¡¡¡°×ÔÊöÀúÊ·¡±Ä£Ê½µÄÀàͼÈçÏÂËùʾ£º

\

¡¡¡¡±¸Íü¼½ÇÉ«ÓÐÈçÏÂÔðÈΣº

¡¡¡¡£¨1£©½«·¢ÆðÈË£¨Originator£©¶ÔÏóµÄÄÚ²¿×´Ì¬´æ´¢ÆðÀ´¡£

¡¡¡¡£¨2£©±¸Íü¼¿ÉÒÔ±£»¤ÆäÄÚÈݲ»±»·¢ÆðÈË£¨Originator£©¶ÔÏóÖ®ÍâµÄÈκζÔÏóËù¶ÁÈ¡¡£

¡¡¡¡·¢ÆðÈ˽ÇÉ«ÓÐÈçÏÂÔðÈΣº

¡¡¡¡£¨1£©´´½¨Ò»¸öº¬ÓÐËüµ±Ç°µÄÄÚ²¿×´Ì¬µÄ±¸Íü¼¶ÔÏó¡£

¡¡¡¡£¨2£©Ê¹Óñ¸Íü¼¶ÔÏó´æ´¢ÆäÄÚ²¿×´Ì¬¡£

¡¡¡¡¿Í»§¶Ë½ÇÉ«ÓиºÔ𱣴汸Íü¼¶ÔÏóµÄÔðÈΡ£

¡¡¡¡Ô´´úÂë
¡¡¡¡Õ­½Ó¿ÚMementoIF£¬ÕâÊÇÒ»¸ö±êʶ½Ó¿Ú£¬Òò´ËËüûÓж¨Òå³öÈκεķ½·¨¡£

[java]
package com.bankht.Memento.HistoryOnSelf;

/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-2 ÏÂÎç05:02:31
*
* @Àà˵Ã÷ £ºÕ­½Ó¿ÚMementoIF£¬ÕâÊÇÒ»¸ö±êʶ½Ó¿Ú£¬Òò´ËËüûÓж¨Òå³öÈκεķ½·¨¡£
*/
public interface MementoIF {

}
package com.bankht.Memento.HistoryOnSelf;

/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-2 ÏÂÎç05:02:31
*
* @Àà˵Ã÷ £ºÕ­½Ó¿ÚMementoIF£¬ÕâÊÇÒ»¸ö±êʶ½Ó¿Ú£¬Òò´ËËüûÓж¨Òå³öÈκεķ½·¨¡£
*/
public interface MementoIF {

}

¡¡·¢ÆðÈ˽Çɫͬʱ»¹¼æÈθºÔðÈ˽ÇÉ«£¬Ò²¾ÍÊÇ˵Ëü×Ô¼º¸ºÔð±£³Ö×Ô¼ºµÄ±¸Íü¼¶ÔÏó¡£

[java]
package com.bankht.Memento.HistoryOnSelf;

/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-2 ÏÂÎç05:02:57
*
* @Àà˵Ã÷ £º·¢ÆðÈ˽Çɫͬʱ»¹¼æÈθºÔðÈ˽ÇÉ«£¬Ò²¾ÍÊÇ˵Ëü×Ô¼º¸ºÔð±£³Ö×Ô¼ºµÄ±¸Íü¼¶ÔÏó¡£
*/
public class Originator {

public String state;

/**
* ¸Ä±ä״̬
*/
public void changeState(String state) {
this.state = state;
System.out.println("״̬¸Ä±äΪ£º" + state);
}

/**
* ¹¤³§·½·¨£¬·µ»¹Ò»¸öеı¸Íü¼¶ÔÏó
*/
public Memento createMemento() {
return new Memento(this);
}

/**
* ½«·¢ÆðÈ˻ָ´µ½±¸Íü¼¶ÔÏóËù¼Ç¼µÄ״̬ÉÏ
*/
public void restoreMemento(MementoIF memento) {
Memento m = (Memento) memento;
changeState(m.state);
}

private class Memento implements MementoIF {

private String state;

/**
* ¹¹Ôì·½·¨
*/
private Memento(Originator o) {
this.state = o.state;
}

private String getState() {
return state;
}

}
}
package com.bankht.Memento.HistoryOnSelf;

/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-2 ÏÂÎç05:02:57
*
* @Àà˵Ã÷ £º·¢ÆðÈ˽Çɫͬʱ»¹¼æÈθºÔðÈ˽ÇÉ«£¬Ò²¾ÍÊÇ˵Ëü×Ô¼º¸ºÔð±£³Ö×Ô¼ºµÄ±¸Íü¼¶ÔÏó¡£
*/
public class Originator {

public String state;

/**
* ¸Ä±ä״̬
*/
public void changeState(String state) {
this.state = state;
System.out.println("״̬¸Ä±äΪ£º" + state);
}

/**
* ¹¤³§·½·¨£¬·µ»¹Ò»¸öеı¸Íü¼¶ÔÏó
*/
public Memento createMemento() {
return new Memento(this);
}

/**
* ½«·¢ÆðÈ˻ָ´µ½±¸Íü¼¶ÔÏóËù¼Ç¼