java设计模式--备忘录模式
2020-12-13 05:43
标签:eal 备忘录 class 实现 封装 public code main static 备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象外保存这个状态,这样以后可将此对象恢复成原来的状态。 就拿单机游戏举例,玩游戏打boss前我们通常都会存档,避免打boss时失误死亡好恢复存档重新开始,我们首先看下面的例子。 测试结果: health:100,mana:100 上面的方法虽然实现了存档,可是实现的并不优美,在测试方法中暴露了太多存档的实现细节,并且如果以后需要保存新的角色属性,那我们就需要修改客户端,所以我们就用到了备忘录模式,把角色属性的保存封装在单独的类中,体现“职责分离”。示例如下。 首先定义了一个“存储卡”类,用于保存角色数据 角色状态管理者,用于保存存储卡,并且不能对存储卡的内容进行操作 游戏角色类 测试方法 测试结果: health:100,mana:100 总结 优点:使用备忘录模式很好地将被保存的对象和保存的状态分隔开来,并且该对象状态备份和恢复不需要自己处理,而是转交给客户端处理,并且如何保存的细节封装到了存储卡中,不再影响客户端。 缺点:由于备忘录对象会消耗内存,如果需要保存的状态占用的内存较大时,资源的消耗也就越大。 java设计模式--备忘录模式 标签:eal 备忘录 class 实现 封装 public code main static 原文地址:https://www.cnblogs.com/yimengyizhen/p/11146686.html//游戏鬼泣的主角Dante类
public class Dante {
//生命值
private int health;
//魔法值
private int mana;
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
public int getMana() {
return mana;
}
public void setMana(int mana) {
this.mana = mana;
}
//角色的初始状态
public void getInitState(){
this.health = 100;
this.mana = 100;
}
public void deathState(){
this.health = 0;
this.mana = 0;
}
public void showState(){
System.out.println("health:"+health+",mana:"+mana);
}
}
public class Test {
public static void main(String[] args) {
//初始化状态
Dante dante = new Dante();
dante.getInitState();
dante.showState();
//存档
Dante danteBak = new Dante();
danteBak.setHealth(dante.getHealth());
danteBak.setMana(dante.getMana());
//角色死亡时的状态
dante.deathState();
dante.showState();
//恢复存档
dante.setHealth(danteBak.getHealth());
dante.setMana(danteBak.getMana());
dante.showState();
}
}
health:0,mana:0
health:100,mana:100public class MemoryCard {
private int health;
private int mana;
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
public int getMana() {
return mana;
}
public void setMana(int mana) {
this.mana = mana;
}
public MemoryCard(int health,int mana){
this.health =health;
this.mana = mana;
}
}
public class MemoryCardCreataker {
private MemoryCard memoryCard;
public MemoryCard getMemoryCard() {
return memoryCard;
}
public void setMemoryCard(MemoryCard memoryCard) {
this.memoryCard = memoryCard;
}
}
//游戏鬼泣的主角Dante类
public class Dante {
//生命值
private int health;
//魔法值
private int mana;
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
public int getMana() {
return mana;
}
public void setMana(int mana) {
this.mana = mana;
}
//角色的初始状态
public void getInitState(){
this.health = 100;
this.mana = 100;
}
public void deathState(){
this.health = 0;
this.mana = 0;
}
public void showState(){
System.out.println("health:"+health+",mana:"+mana);
}
//将角色状态保存在存储卡中
public MemoryCard saveState(){
return new MemoryCard(health,mana);
}
//回档
public void recoveryState(MemoryCard memoryCard){
this.health = memoryCard.getHealth();
this.mana = memoryCard.getMana();
}
}
public class Test {
public static void main(String[] args) {
//初始化状态
Dante dante = new Dante();
dante.getInitState();
dante.showState();
//存档
MemoryCardCreataker memoryCardCreataker = new MemoryCardCreataker();
memoryCardCreataker.setMemoryCard(dante.saveState());
//角色死亡时的状态
dante.deathState();
dante.showState();
//恢复存档
dante.recoveryState(memoryCardCreataker.getMemoryCard());
dante.showState();
}
}
health:0,mana:0
health:100,mana:100