备忘录模式:用于保存对象的某个时刻的状态,以便在需要的时候恢复对象。
第一步:创建Originator(愿生者):需要被保存的状态,即当前的状态
public class Setting { private String oper; //创建一个版本 public Version createVersion(){ return new Version(oper); } //版本回退 public void backVersion(Version version){ this.oper = version.getSetting(); System.out.println("----版本回退:" + oper); } //设置操作 public void setOper(String oper) { System.out.println("当前操作:" + oper); this.oper = oper; } public String getOper() { return oper; } }
第二步:创建Memento(备忘录):该对象是由Originator创建,用来保存Originator的内部状态(相当于一个镜像)
public class Version { private String setting; public Version(String setting ) { this.setting = setting; } public String getSetting() { return setting; } }
第三步:创建Caretaker(管理者):在适当的时候对恢复Originator对象的状态(回退)
public class Caretaker { //存储所有版本信息 private Map<String,Version> versions = new HashMap<>(); private List<String> verNums = new ArrayList<>(); //保存一个版本 public void addVersion(Version version){ String verNum = UUID.randomUUID().toString().replace("-", ""); verNums.add(verNum); versions.put(verNum, version); } //返回前一个版本 public Version getVersion(){ return versions.get(verNums.get(verNums.size() - 2)); } //返回指定版本 public Version getVersion(String verNum){ return versions.get(verNum); } //显示所有版本号 public void showVersions(){ for(String num : verNums){ System.out.println(num); } } }
第四步:测试
public class MainClass { public static void main(String[] args) { Caretaker caretaker = new Caretaker(); Setting setting = new Setting(); setting.setOper("开机"); caretaker.addVersion(setting.createVersion()); setting.setOper("关闭防火墙"); caretaker.addVersion(setting.createVersion()); setting.setOper("下载东西"); caretaker.addVersion(setting.createVersion()); setting.setOper("电脑中毒"); caretaker.addVersion(setting.createVersion()); //回退上一个版本 setting.backVersion(caretaker.getVersion()); System.out.println("所有版本号"); //查看所有版本号 caretaker.showVersions(); } }