zoukankan      html  css  js  c++  java
  • 【设计模式】12.备忘录模式

    备忘录模式

      备忘录(Memento)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

    结构图:

    Originator:发起者,创建备忘录来记录内部状态,并可以利用备忘录恢复。

    Caretaker:管理者,负责保存备忘录。

    Memeto:备忘录,记录Originator内部状态。

    例:

    public class Memeto {             // 备忘录
        private String state;
    
        public Memeto(String state) { // 记录数据到备忘录
            this.state = state;
        }
    
        public String getState() {
            return state;
        }
    
        public void setState(String state) {
            this.state = state;
        }
    }
    public class Caretaker {   // 管理者
        private Memeto memeto;
    
        public Memeto getMemeto() {     // 获取备忘录
            return memeto;
        }
    
        public void setMemeto(Memeto memeto) {  // 设置备忘录
            this.memeto = memeto;
        }
    }
    public class Originator {  // 发起者
        private String state;
    
        public String getState() {
            return state;
        }
    
        public void setState(String state) {
            this.state = state;
        }
    
        public Memeto createMemeto(){         // 创建备忘录
            return new Memeto(state);
        }
    
        public void setMemeto(Memeto memeto){  // 恢复备忘录
            this.state=memeto.getState();
        }
    
    }
    public class Test {
        public static void main(String[] args) {
            Originator originator = new Originator();
            originator.setState("状态1");         // 设置初始状态1
            System.out.println("初始状态:" + originator.getState());
    
            Caretaker caretaker = new Caretaker();
            caretaker.setMemeto(originator.createMemeto());  // 利用originator创建初始状态1的备忘录,然后由caretaker负责保存
    
            originator.setState("状态2");        // 更改状态
            System.out.println("更改后的状态:" + originator.getState());
    
            originator.setMemeto(caretaker.getMemeto());   // 恢复保存到备忘录的状态
            System.out.println("恢复初始状态后的状态:" + originator.getState());
        }
    }

    输出:

    初始状态:状态1
    更改后的状态:状态2
    恢复初始状态后状态:状态1
  • 相关阅读:
    分享一下前一段时间的开发总结
    循环,梦
    从C#程序中调用非受管DLLs
    大学生零工资就业,谁之过?
    国外宽带用户的上网速度能达到多少呢?
    天沉沉,来个好天气吧
    虚伪,不只是形容一个人
    回头思考关于xml的使用
    从毕业生当中看人与人的差距
    C# 编码规则
  • 原文地址:https://www.cnblogs.com/jiazhongxin/p/12848995.html
Copyright © 2011-2022 走看看