public class Test {
public static void main(String[] args) {
Administration administration = new Administration();
RoleGame roleGame = new RoleGame();
roleGame.init();
System.out.println(roleGame.toString());
// 备份到管理者角色中
administration.setBackup(roleGame.saveRo());
roleGame.rushThroughCustoms();
System.out.println(roleGame.toString());
// undo
roleGame.recovery(administration.getBackup());
System.out.println(roleGame.toString());
}
}
// 游戏 发起人角色
class RoleGame{
// 状态
private String state;
// 场景
private String scene;
// 初始化内部状态
void init(){
this.state = "正常状态";
this.scene = "第一关";
}
// 冲关
void rushThroughCustoms() {
this.state = "残血状态";
this.scene = "Boss关卡";
}
// 备份角色状态功能
Backup saveRo() {
return new Backup(state, scene);
}
// 恢复状态
void recovery(Backup backup) {
this.state = backup.getState();
this.scene = backup.getScene();
}
@Override
public String toString() {
return "RoleGame{" +
"state='" + state + '\'' +
", scene='" + scene + '\'' +
'}';
}
}
// 备忘录角色
class Backup {
// 状态
private String state;
// 场景
private String scene;
Backup(String state, String sence) {
this.state = state;
this.scene = sence;
}
public String getScene() {
return scene;
}
public String getState() {
return state;
}
}
// 管理者角色,管理备忘录角色
// 能去改变备忘录角色,不好
class Administration{
// 可以是List,Map等,存储历史上的备忘录
Backup backup;
public void setBackup(Backup backup) {
this.backup = backup;
}
public Backup getBackup() {
return backup;
}
}
public class Test {
public static void main(String[] args) {
Administration administration = new Administration();
RoleGame roleGame = new RoleGame();
roleGame.init();
System.out.println(roleGame.toString());
// 备份到管理者角色中
administration.setBackupService(roleGame.saveRo());
roleGame.rushThroughCustoms();
System.out.println(roleGame.toString());
// undo
roleGame.recovery(administration.getBackupService());
System.out.println(roleGame.toString());
}
}
// 抽象备忘录
interface BackupService {
}
// 游戏 发起人角色
class RoleGame{
// 状态
private String state;
// 场景
private String scene;
// 初始化内部状态
void init(){
this.state = "正常状态";
this.scene = "第一关";
}
// 冲关
void rushThroughCustoms() {
this.state = "残血状态";
this.scene = "Boss关卡";
}
// 备份角色状态功能
BackupService saveRo() {
return new BackupServiceImpl(state, scene);
}
// 恢复状态
void recovery(BackupService backup) {
BackupServiceImpl backupImpl = (BackupServiceImpl)backup;
this.state = backupImpl.getState();
this.scene = backupImpl.getScene();
}
@Override
public String toString() {
return "RoleGame{" +
"state='" + state + '\'' +
", scene='" + scene + '\'' +
'}';
}
// 具体备忘录
private class BackupServiceImpl implements BackupService{
// 状态
private String state;
// 场景
private String scene;
BackupServiceImpl(String state, String scene) {
this.state = state;
this.scene = scene;
}
public String getState() {
return state;
}
public String getScene() {
return scene;
}
}
}
// 管理者角色,管理备忘录角色。
// 而且不能去改变备忘录角色
class Administration{
// 可以是List,Map等,存储历史上的备忘录
BackupService backupService;
public BackupService getBackupService() {
return backupService;
}
public void setBackupService(BackupService backupService) {
this.backupService = backupService;
}
}