应用场景:
用于需要维护或记录历史的类,或者需要保存属性只是众多属性中的一小部分时,可以通过保存的备忘录信息还原到之前的状态。
/**
* 游戏角色的状态
* @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++);
}
}
}