设计模式十————备忘录模式

备忘录模式定义:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个对象。这样以后就可以将该对象恢复到原先保存的状态。
初步理解:因为要保存状态,因此要有一个Memento类来存储对象的内部状态。因为有很多状态要保存,因此需要一个CareTaker类来管理这些Memento。Originator是要保存状态的对象。
code…


Originator类:

public class Originator {
    private String state;

    public String getState() {
        return state;
    }
    public void setState(String state) {
        this.state = state;
    }
    public Memento createState()
    {
        return new Memento(this.state);
    }
    public void restoreState(Memento memento)
    {
        this.state=memento.getState();
    }
    public void show()
    {
        System.out.println("当前状态:"+this.state);
    }
}

当这个类需要保存它的状态时,就调用它的createState方法。就会生成一个Memento对象,将这个对象传递给careTaker,将其添加到careTaker的集合当中。
Memento类:

public class Memento {
    private String state;

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

careTaker类:

public class Caretaker {
    private ArrayList<Memento> arrayList=new ArrayList<>();
    public void saveMemento(Memento memento)
    {
        arrayList.add(memento);//添加备忘录
    }
    public Memento getMemento(int index)
    {
        return arrayList.get(index);
    }
}

main方法:

public class Main {
    public static void main(String[] args) {
        Originator originator=new Originator();//要存储这个对象的状态
        Caretaker caretaker=new Caretaker();//管理备忘录的对象
        originator.setState("sleep");//设置对象的状态
        originator.show();//显示对象的当前状态
        caretaker.saveMemento(originator.createState());//对对象的当前状态进行备份
        originator.setState("fly");//设置新状态
        originator.show();
        caretaker.saveMemento(originator.createState());//继续备份
        originator.setState("run");
        originator.show();
        caretaker.saveMemento(originator.createState());
        originator.restoreState(caretaker.getMemento(1));//恢复到第二个状态
        originator.show();
    }
}

总结:备忘录就是对历史状态的备份,备份会有很多份,因此要有一个管理类负责管理这些备份。这个管理可以添加和删除备份。


上一篇
---The End---
下一篇
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值