备忘录模式(Memento)

备忘录模式

一. 备忘录模式

1.1 定义

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

1.2 角色

  • 备忘录(Memento):用于存储发起者对象的内部状态.
  • 发起者(Orginator):创建备忘录,记录或恢复自身状态.
  • 管理者(CareTaker):负责管理备忘录.

二. 具体实现

2.1 创建备忘录类

    public class Memento {
        private String state;
        public Memento(String state){
            this.state = state;
        }
        public String getState() {
            return state;
        }
    }

2.2 创建发起者类

    public class Originator {
        private String state;
        public void setState(String state) {
            System.out.println("state changed : " + state);
            this.state = state;
        }
        public Memento save(){
            return new Memento(state);
        }
    }

2.3 创建管理者类

    public class CareTaker {
        private Memento memento;
        public void save(Memento memento){
            System.out.println("Memento save ..." + memento.getState());
            this.memento = memento;
        }
        public Memento read(){
            System.out.println("Memento read ..." + memento.getState());
            return memento;
        }
    }

2.4 调用

    public static void main(String[] args) {
        Originator originator = new Originator();
        CareTaker careTaker = new CareTaker();
        originator.setState("1");
        careTaker.save(originator.save());
        originator.setState("2");
        careTaker.read();
    }

2.5 输出

    state changed : 1
    Memento save ...1
    state changed : 2
    Memento read ...1

三. 优缺点

3.1 优点

  • 可以恢复到之前的状态.

3.2 缺点

  • 耗费资源.

四. 源码

    https://github.com/Seasons20/DisignPattern.git
    原文作者:Knowing
    原文地址: https://segmentfault.com/a/1190000015189132
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞