一.案例引入
1.案例描述
2.传统方式解决的思路
二.备忘录模式
1.基本介绍
2.原理类图
解释说明
3.原理的具体代码
Originator
public class Originator {
private String state;
public String getState ( ) {
return state;
}
public void setState ( String state) {
this . state = state;
}
public Memento saveStateMemento ( ) {
return new Memento ( state) ;
}
public void getStateFromMemento ( Memento memento) {
state = memento. getState ( ) ;
}
}
Memento
public class Memento {
private String state;
public Memento ( String state) {
this . state = state;
}
public String getState ( ) {
return state;
}
}
Caretaker
public class Caretaker {
private List< Memento> mementoList = new ArrayList < Memento> ( ) ;
public void add ( Memento memento) {
mementoList. add ( memento) ;
}
public Memento get ( int index) {
return mementoList. get ( index) ;
}
}
Client
public class Client {
public static void main ( String[ ] args) {
Originator originator = new Originator ( ) ;
Caretaker caretaker = new Caretaker ( ) ;
originator. setState ( "状态1" ) ;
caretaker. add ( originator. saveStateMemento ( ) ) ;
originator. setState ( "状态2" ) ;
caretaker. add ( originator. saveStateMemento ( ) ) ;
originator. setState ( "状态3" ) ;
caretaker. add ( originator. saveStateMemento ( ) ) ;
System. out. println ( "当前状态为:" + originator. getState ( ) ) ;
originator. getStateFromMemento ( caretaker. get ( 0 ) ) ;
System. out. println ( "恢复后,当前状态为:" + originator. getState ( ) ) ;
}
}
4.备忘录模式解决案例问题的UML类图
5.备忘录模式解决案例问题的具体代码
Memento
public class Memento {
private int vit;
private int def;
public Memento ( int vit, int def) {
this . vit = vit;
this . def = def;
}
public int getVit ( ) {
return vit;
}
public void setVit ( int vit) {
this . vit = vit;
}
public int getDef ( ) {
return def;
}
public void setDef ( int def) {
this . def = def;
}
}
Caretaker
public class Caretaker {
private Memento memento;
public Memento getMemento ( ) {
return memento;
}
public void setMemento ( Memento memento) {
this . memento = memento;
}
}
GameRole
public class GameRole {
private int vit;
private int def;
public Memento createMemento ( ) {
return new Memento ( vit, def) ;
}
public void recoverGameRoleFromMemento ( Memento memento) {
this . vit = memento. getVit ( ) ;
this . def = memento. getDef ( ) ;
}
public void display ( ) {
System. out. println ( "游戏角色当前的攻击力:" + this . vit+ "。防御力:" + this . def) ;
}
public int getVit ( ) {
return vit;
}
public void setVit ( int vit) {
this . vit = vit;
}
public int getDef ( ) {
return def;
}
public void setDef ( int def) {
this . def = def;
}
}
Client
public class Client {
public static void main ( String[ ] args) {
GameRole gameRole = new GameRole ( ) ;
gameRole. setVit ( 100 ) ;
gameRole. setDef ( 100 ) ;
gameRole. display ( ) ;
Caretaker caretaker = new Caretaker ( ) ;
caretaker. setMemento ( gameRole. createMemento ( ) ) ;
System. out. println ( "和boss大战中-------------" ) ;
gameRole. setDef ( 30 ) ;
gameRole. setVit ( 30 ) ;
gameRole. display ( ) ;
System. out. println ( "大战后,使用备忘录对象将状态恢复到战前" ) ;
gameRole. recoverGameRoleFromMemento ( caretaker. getMemento ( ) ) ;
System. out. println ( "恢复后的状态为" ) ;
gameRole. display ( ) ;
}
}
游戏角色当前的攻击力:100 。防御力:100
和boss大战中-- -- -- -- -- -- -
游戏角色当前的攻击力:30 。防御力:30
大战后,使用备忘录对象将状态恢复到战前
恢复后的状态为
游戏角色当前的攻击力:100 。防御力:100
6.备忘录模式的注意事项和细节