设计模式之备忘录模式

来源:互联网 发布:mac svn图形化界面 编辑:程序博客网 时间:2024/06/01 07:45

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

角色:

  1. Memento 备忘录存储原发器对象的内部状态
  2. Originator 原发器创建一个备忘录,用以记录当前时刻它的内部状态。 使用备忘录恢复内部状态
  3. Caretaker 负责保存好备忘录。 不能对备忘录的内容进行操作或检查

类图:
这里写图片描述

实现:

public class Originator {    private String state;    public Originator(String state) {        this.state = state;    }    //保存    public Memento createMemento() {        return new Memento(state);    }    //返回    public void history(Memento memento) {        state = memento.getState();    }    public String getState() {        return state;    }    public void setState(String state) {        this.state = state;    }    @Override    public String toString() {        System.out.println("Originator{" +                "state='" + state + '\'' +                '}');        return "Originator{" +                "state='" + state + '\'' +                '}';    }}
public class Memento {    private String state;    public Memento(String state) {        this.state = state;    }    public String getState() {        return state;    }    public void setState(String state) {        this.state = state;    }}
public class Caretaker {    private ArrayList<Memento> mementoList ;    public Memento getMemento(int i){        if(null!=mementoList){            return mementoList.get(i);        }        return null;    }    public void setMemento(Memento memento){        if(null == mementoList){            mementoList = new ArrayList<>();        }        mementoList.add(memento);    }}
public class testMemento {    //步数标志    private static int index = 0;    public static void main(String[] args) {        Caretaker caretaker = new Caretaker();        Originator originator = new Originator("1");        originator.toString();        caretaker.setMemento(originator.createMemento());        //每次备份,index+1        index++;        originator.setState("2");        originator.toString();        caretaker.setMemento(originator.createMemento());        index++;        originator.setState("3");        originator.toString();        originator.history(caretaker.getMemento(index-1));        //每次撤销,index-1        index--;        originator.toString();        originator.history(caretaker.getMemento(index-1));        index--;        originator.toString();    }}

打印:
Originator{state=’1’}
Originator{state=’2’}
Originator{state=’3’}
Originator{state=’2’}
Originator{state=’1’}

0 0
原创粉丝点击