您的位置:首页 > 编程语言 > Java开发

java设计模式之备忘录模式

2017-11-29 16:57 567 查看
java设计模式参考文章:

Java设计模式实战23种设计模式介绍以及在Java中的实现Java设计模式 Java经典设计模式之五大创建型模式

## 定义 ##

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存该状态,
这样就可以将该对象恢复到之前保存的状态。


## 代码举例 ##

/**
* @author bwx
* @date 2017/11/29
* 游戏角色, 原发器
*/
public class GameRoleOriginator {
private int vit;    // 生命值
private int atk;    // 攻击力
private int def;    // 防御力

public GameRoleOriginator(int vit, int atk, int def) {
this.vit = vit;
this.atk = atk;
this.def = def;
}

public void fight() {
vit -= 10;
atk -= 8;
def += 10;
}

public RoleStateMemento save() {
return new RoleStateMemento(vit, atk, def);
}

public void recover(RoleStateMemento memento) {
this.setVit(memento.getVit());
this.setAtk(memento.getAtk());
this.setDef(memento.getDef());
}

public int getVit() {
return vit;
}

public void setVit(int vit) {
this.vit = vit;
}

public int getAtk() {
return atk;
}

public void setAtk(int atk) {
this.atk = atk;
}

public int getDef() {
return def;
}

public void setDef(int def) {
this.def = def;
}

@Override
public String toString() {
return "GameRoleOriginator{" +
"vit=" + vit +
", atk=" + atk +
", def=" + def +
'}';
}
}

/**
* @author bwx
* @date 2017/11/29
*/
public class RoleStateMemento {
private int vit;
private int atk;
private int def;

public RoleStateMemento(int vit, int atk, int def) {
this.vit = vit;
this.atk = atk;
this.def = def;
}

public int getVit() {
return vit;
}

public void setVit(int vit) {
this.vit = vit;
}

public int getAtk() {
return atk;
}

public void setAtk(int atk) {
this.atk = atk;
}

public int getDef() {
return def;
}

public void setDef(int def) {
this.def = def;
}
}

/**
* @author bwx
* @date 2017/11/29
* 备忘录模式
*/
public class Main {
public static void main(String[] args) {

GameRoleOriginator originator = new GameRoleOriginator(100, 50, 50);
System.out.println("角色初始状态: " + originator);

// 保存进度
RoleStateMemento memento = originator.save();

System.out.println("fight boss...");
originator.fight();
System.out.println("阻击Boss后的状态: " + originator);

originator.recover(memento);
System.out.println("恢复后的状态: " + originator);
}
}


## 优点 ##

备忘录模式使用备忘录可以吧原先者的内部状态全部保存起来,使是有很“亲密”的对象可以访问备忘录中的数据。

备忘录模式强调了类设计单一责任的原则,即将状态的刻画和保存分开。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: