一、前言:
备忘录模式的注意事项和细节:
给用户提供了一个可恢复的机制,可以使用户方便的回到某个历史的状态。实现了信息的封装,使得用户无需关心状态保存的细节。如果类的成员变量过多,势必会占用比较大的资源,而且每次保存都会消耗一定的内存。
二、备忘录模式:
2.1、UML 图:
2.2、代码实例:
Step 1) 创建 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
;
}
}
Step 2) 创建 Caretaker 类:
public class Caretaker {
private Memento memento
;
private ArrayList
<Memento
> mementos
;
private HashMap
<String
, ArrayList
<Memento
>> rolesMementos
;
public Memento
getMemento(){
return memento
;
}
public void setMemento(Memento memento
){
this.memento
= memento
;
}
}
Step 3) 创建 GameRole 类:
public class GameRole {
private int vit
;
private int 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
;
}
public Memento
creatMenento(){
return new Memento(vit
, def
);
}
public void revoverGameRoleFromMementto(Memento memento
){
this.vit
= memento
.getVit();
this.def
= memento
.getDef();
}
public void dispalay(){
System
.out
.println("游戏当前的攻击力:"+ this.vit
+ " 防御力:" + this.def
);
}
}
Step 4) 创建 main 方法:
public class Client {
public static void main(String
[] args
) {
GameRole gameRole
= new GameRole();
gameRole
.setVit(100);
gameRole
.setDef(100);
System
.out
.println("===== BOSS 大战前的状态 =====");
gameRole
.dispalay();
Caretaker caretaker
= new Caretaker();
caretaker
.setMemento(gameRole
.creatMenento());
System
.out
.println("===== BOSS 大战前后状态 =====");
gameRole
.setVit(30);
gameRole
.setDef(30);
gameRole
.dispalay();
System
.out
.println("===== BOSS 大战后,使用备忘录恢复后的状态 =====");
gameRole
.revoverGameRoleFromMementto(caretaker
.getMemento());
gameRole
.dispalay();
}
}
• 由 ChiKong_Tam 写于 2020 年 10 月 22 日