设计模式(七)备忘录模式

备忘录模式:用于保存对象的某个时刻的状态,以便在需要的时候恢复对象。

第一步:创建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();
        
    }
}

原文地址:https://www.cnblogs.com/ganchuanpu/p/7645822.html