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
  • 相关阅读:
    Best Cow Fences_二分&&DP
    Palindrome_滚动数组&&DP
    Making the Grade_滚动数组&&dp
    BUY LOW, BUY LOWER_最长下降子序列
    Testing the CATCHER_DP
    Best Sequence_DFS&&KMp
    (Your)((Term)((Project)))
    [SOJ] 畅通工程续
    [SOJ] 商人的宣传
    [SOJ] 无路可逃?
  • 原文地址:https://www.cnblogs.com/jiazhongxin/p/12848995.html
Copyright © 2011-2022 走看看