在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。 存档游戏
package com. nike. erick. memento;
import lombok. AllArgsConstructor;
import lombok. Getter;
import lombok. Setter;
import java. util. ArrayList;
import java. util. List;
public class Test {
public static void main ( String[ ] args) {
MementoManage manager = new MementoManage ( ) ;
GameCharacter erick = new GameCharacter ( "FIRST STATE" ) ;
Memento firstMemento = erick. presentState ( ) ;
manager. saveGame ( firstMemento) ;
erick. setState ( "SECOND STATE" ) ;
Memento secondMemento = erick. presentState ( ) ;
manager. saveGame ( secondMemento) ;
Memento memento = manager. rollback ( 1 ) ;
erick. reload ( memento) ;
System. out. println ( erick. getState ( ) ) ;
}
}
@AllArgsConstructor
class Memento {
@Getter
@Setter
private String state;
}
@AllArgsConstructor
class GameCharacter {
@Getter
@Setter
private String state;
public Memento presentState ( ) {
return new Memento ( state) ;
}
public void reload ( Memento memento) {
state = memento. getState ( ) ;
}
}
class MementoManage {
private List< Memento> mementoList = new ArrayList < > ( ) ;
public void saveGame ( Memento memento) {
mementoList. add ( memento) ;
}
public Memento rollback ( int index) {
return mementoList. get ( index) ;
}
}