备忘录模式

目录

备忘录模式

备忘录模式概述

备忘录模式结构

备忘录模式实现

实现多次撤销

备忘录模式优/缺点与适用环境


备忘录模式

备忘录模式是软件系统的"月光宝盒",它提供了一种对象状态的撤销实现机制,当系统中的某个对象需要恢复到某一历史状态时可以使用备忘录模式进行设计.

备忘录模式概述

备忘录模式:在不破坏封装的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态.

备忘录模式是一种对象行为型模式,其别名为标记模式.

备忘录模式结构

备忘录模式包含3个角色:

  • 原发器
  • 备忘录
  • 负责人/管理者

备忘录模式实现

原发器类

package dp.memento;
public class Originator {
    private String state;
 
    public Originator(){}
 
  // 创建一个备忘录对象
    public Memento createMemento() {
    return new Memento(this);
    }
 
  // 根据备忘录对象恢复原发器状态
    public void restoreMemento(Memento m) {
     state = m.state;
    }
 
    public void setState(String state) {
        this.state=state;
    }
 
    public String getState() {
        return this.state;
    }
}

备忘录类

package dp.memento;
//备忘录类,默认可见性,包内可见
class Memento {
    private String state;
 
    public Memento(Originator o) {
    state = o.getState();
    }
 
    public void setState(String state) {
        this.state=state;
    }
 
    public String getState() {
        return this.state;
    }
}

还可将备忘录类作为原发器类的内部类,使得只有原发器才可以访问备忘录中的数据,其他对象都无法使用备忘录中的数据.

负责人类

package dp.memento;
public class Caretaker {
	private Memento memento;
 
	public Memento getMemento() {
		return memento;
	}
 
	public void setMemento(Memento memento) {
		this.memento=memento;
	}
}

实现多次撤销

多次撤销的解决方案,就是在负责人类中定义一个集合来存储多个备忘录,每个备忘录负责保存一个历史状态,在撤销时可以对备忘录集合进行逆向遍历,回到一个指定的历史状态,而且还可以对备忘录集合进行正向遍历,实现重做或恢复操作,即取消撤销,让对象状态得到恢复.

在实际开发中可以使用链表或者堆栈来处理有分支的对象状态改变,读者可以通过链表或者堆栈进行改进.

备忘录模式优/缺点与适用环境

备忘录模式优点

  • 提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,此外它还实现了对信息的封装.

备忘录模式缺点

  • 资源消耗过大,如果需要保存的原发器类的成员变量太多,就不可避免地需要占用大量的存储资源.

备忘录模式适用环境

  • 保存一个对象在某一时刻的全部状态或部分状态,这样以后需要时它能够恢复到先前的状态,实现撤销操作.
  • 防止外界对象破坏一个对象历史状态的封装性,避免将对象历史状态的实现细节暴露给外界对象.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值