备忘录模式

应用场景:

用于需要维护或记录历史的类,或者需要保存属性只是众多属性中的一小部分时,可以通过保存的备忘录信息还原到之前的状态。


/**
 * 游戏角色的状态
 * @author Administrator
 *
 */
public class RoleState {
//状态时刻标记
public String state_Time;
//血量
public int hp;
//蓝量
public int mp;
//防御力
public int def;

public RoleState(String state_Time, int hp, int mp, int def) {
super();
this.state_Time = state_Time;
this.hp = hp;
this.mp = mp;
this.def = def;
}


@Override
public String toString() {
return "RoleState [state_Time=" + state_Time + ", hp=" + hp + ", mp="
+ mp + ", def=" + def + "]";
}
}

------------------------------------------------------------------------------------------------------------------

/**
 * 游戏角色
 * @author Administrator
 *
 */
public class Role {
public String roleName;

public Role(String roleName, RoleState roleState) {
super();
this.roleName = roleName;
this.roleState = roleState;
System.out.println("角色当前状态:"+roleState.toString()); 
}


public RoleState roleState;


//保存当前游戏角色的状态
public RoleState saveState(){
System.out.println("保存当前状态:"+roleState.toString());
return roleState;
}

//恢复角色状态
public void recoveryState(RoleState roleState){
System.out.println("恢复保存的状态:"+roleState.toString());
this.roleState = roleState;
}


@Override
public String toString() {
return "Role [roleName=" + roleName + ", roleState=" + roleState + "]";
}
}

-------------------------------------------------------------------------------------------------------------------

/**
 * 角色状态管理类
 * @author Administrator
 *
 */
public class RoleStateManager {

//存储一系列状态的集合
public  List<RoleState> list = new ArrayList<RoleState>();

private static RoleStateManager  manager = new RoleStateManager();

public static RoleStateManager getInstance(){
return manager;
}

//保存角色状态
public void saveState(RoleState roleState){
if(roleState!=null){
list.add(roleState);
System.out.println("保存当前状态:"+roleState.toString()); 
}
}

//恢复状态
public RoleState recoveryState(int pos){
if(list.size()==0){
System.out.println("还没有保存过角色状态");
return null; 
}else{
if(pos>=0 && pos<=list.size()-1){
System.out.println("恢复到之前状态"+list.get(pos).toString()); 
return list.get(pos);
}
}
return null;
}
}

-----------------------------------------------------------------------------------------------------------------

public class Test {


/**
* 测试类
*/
public static void main(String[] args) {
//角色初始化状态
RoleState state_init = new RoleState(System.currentTimeMillis()+"", 1000, 600, 1500);
Role role = new Role("晓刚", state_init ); 

RoleStateManager manager = RoleStateManager.getInstance();


System.out.println("开始闯关暗黑城I");
role.roleState.hp = 850;
role.roleState.mp = 450;
role.roleState.def = 1300;
role.roleState.state_Time = System.currentTimeMillis()+"";
manager.saveState(role.roleState);

delay();

System.out.println("开始闯关暗黑城II");
role.roleState.hp = 750;
role.roleState.mp = 250;
role.roleState.def = 800;
role.roleState.state_Time =System.currentTimeMillis()+"";
manager.saveState(role.roleState);

delay();

System.out.println("开始闯关暗黑城BOSS");
System.out.println("闯关失败,有机会恢复到某个时间点的状态");  

role.recoveryState(manager.recoveryState(1));

for (RoleState state : manager.list) {
System.out.println(state); 
}

}

private  static void delay(){
for(int i=0;i<1000;i++){
for(int j=0;j<100;j++);
}
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值