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

java设计模式_备忘录模式

2014-09-22 00:00 411 查看
摘要: Memento模式适用于功能比较复杂,但是需要维护或者记录属性历史的类。



package com.wangbiao.design.memento;

/**
*
* @Title: GameRole.java
* @Package com.wangbiao.design.memento
* @Description: TODO
* @author wangbiao
* @date 2014-9-22 上午11:52:44
* @version V1.0
*/
public class GameRole {

private String name;
private int attackNum;
private int bloodNum;

public GameRole() {
// TODO Auto-generated constructor stub
}

public GameRole(String name,int attackNum,int bloodNum) {
this.name = name;
this.attackNum = attackNum;
this.bloodNum = bloodNum;
}

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAttackNum() {
return attackNum;
}
public void setAttackNum(int attackNum) {
this.attackNum = attackNum;
}
public int getBloodNum() {
return bloodNum;
}
public void setBloodNum(int bloodNum) {
this.bloodNum = bloodNum;
}

public GameRole initRole(){
return new GameRole("Enchanter", 100, 100);
}

//save data into Memento
public Memento saveRoleInfo(){
return new Memento(this.attackNum,this.bloodNum);
}

//get the old role info
public boolean getBeforeRoleInfo(Memento memento){

if(memento != null){

this.attackNum = memento.getAttackNum();
this.bloodNum = memento.getBloodNum();
return true;

}

return false;
}

public void fightWithBoss(){
System.out.println("figth with boss");
this.attackNum = this.attackNum/5;
this.bloodNum  = this.bloodNum/5;
}

public void displayRoleInfo(){
System.out.println("攻击指数:" +this.attackNum +" ----"+ "血指数:"+this.bloodNum);
}
}

package com.wangbiao.design.memento;

/**
*
* @Title: Memento.java
* @Package com.wangbiao.design.memento
* @Description: TODO
* @author wangbiao
* @date 2014-9-22 下午12:11:12
* @version V1.0
*/
public class Memento {

private int attackNum;
private int bloodNum;

public Memento() {
// TODO Auto-generated constructor stub
}

public Memento(int attackNum,int bloodNum) {
this.attackNum = attackNum;
this.bloodNum = bloodNum;
}

public int getAttackNum() {
return attackNum;
}
public void setAttackNum(int attackNum) {
this.attackNum = attackNum;
}
public int getBloodNum() {
return bloodNum;
}
public void setBloodNum(int bloodNum) {
this.bloodNum = bloodNum;
}

}

package com.wangbiao.design.memento;

/**
*
* @Title: RoleCaretaker.java
* @Package com.wangbiao.design.memento
* @Description: TODO
* @author wangbiao
* @date 2014-9-22 下午12:11:18
* @version V1.0
*/
public class RoleCaretaker {

private Memento memento;

public Memento getMemento() {
return memento;
}

public void setMemento(Memento memento) {
this.memento = memento;
}

}

/**
* @Title: Client.java
* @Package com.wangbiao.design.memento
* @Description: TODO
* @author wangbiao
* @date 2014-9-22 下午12:11:03
* @version V1.0
*/
package com.wangbiao.design.memento;

/**
* @Title: Client.java
* @Package com.wangbiao.design.memento
* @Description: TODO
* @author wangbiao
* @date 2014-9-22 下午12:11:03
* @version V1.0
*/
public class Client {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

GameRole gameRole = new GameRole();
gameRole = gameRole.initRole();
gameRole.displayRoleInfo();

// store GameRole info to RoleCaretaker
RoleCaretaker caretaker = new RoleCaretaker();
caretaker.setMemento(gameRole.saveRoleInfo());

//fight with boss
gameRole.fightWithBoss();
gameRole.displayRoleInfo();

// get the old role info
gameRole.getBeforeRoleInfo(caretaker.getMemento());
gameRole.displayRoleInfo();

// result
/*
攻击指数:100 ----血指数:100
figth with boss
攻击指数:20 ----血指数:20
攻击指数:100 ----血指数:100
*/

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: