设计模式——行为型模式_备忘录模式

1. 类图

备忘录模式的 UML 图

2. 角色

  • Memento:包含了要被恢复的对象的状态
  • Originator:创建新的Memento;或者设置Memento中的状态
  • CareTaker:记录Memento的历史状态

3. 代码

  • Memento
    • public class Memento {
         private String state;
       
         public Memento(String state){
            this.state = state;
         }
       
         public String getState(){
            return state;
         }  
      }
  • Originator
    • public class Originator {
         private String state;
       
         public void setState(String state){
            this.state = state;
         }
       
         public String getState(){
            return state;
         }
       
         public Memento saveStateToMemento(){
            return new Memento(state);
         }
       
         public void getStateFromMemento(Memento Memento){
            state = Memento.getState();
         }
      }
  • CareTaker
    • import java.util.ArrayList;
      import java.util.List;
       
      public class CareTaker {
         private List<Memento> mementoList = new ArrayList<Memento>();
       
         public void add(Memento state){
            mementoList.add(state);
         }
       
         public Memento get(int index){
            return mementoList.get(index);
         }
      }
  • 客户端调用
    • public class MementoPatternDemo {
         public static void main(String[] args) {
            Originator originator = new Originator();
            CareTaker careTaker = new CareTaker();
            originator.setState("State #1");
            originator.setState("State #2");
            careTaker.add(originator.saveStateToMemento());
            originator.setState("State #3");
            careTaker.add(originator.saveStateToMemento());
            originator.setState("State #4");
       
            System.out.println("Current State: " + originator.getState());    //Current State: State #4
            originator.getStateFromMemento(careTaker.get(0));
            System.out.println("First saved State: " + originator.getState());    //First saved State: State #2
            originator.getStateFromMemento(careTaker.get(1));
            System.out.println("Second saved State: " + originator.getState());    //Second saved State: State #3
         }
      }

4. 总结

优点

  • 给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态
  • 实现了信息的封装,使得用户不需要关心状态的保存细节

缺点

  • 消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值