Java设计模式-20、备忘录模式-撤销功能的实现

本文详细介绍了Java中的备忘录模式,用于实现撤销功能。备忘录模式通过捕获对象的内部状态并在对象外部保存,以便在需要时恢复对象到先前的状态。文中提供了代码实现,展示了如何在多个撤销和取消撤销操作中使用集合,并讨论了模式的优点(如状态恢复机制和信息封装)和缺点(如资源消耗)。此外,还指出了适用场景,如需要撤销功能的应用或需要保护对象历史状态的封装性的情况。
摘要由CSDN通过智能技术生成

第20章:备忘录模式-撤销功能的实现

定义:

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

象棋中后退一步

image-20201122120828482

image-20201122120931094

结构:

image-20201122121038518

代码实现:

//原发器:创建备忘录,存储内部状态
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;
    }
}
//备忘录类:默认可见性,包内可见,存储原发器内部状态
class Memento {
   
    public String state;

    public Memento(Originator o) {
   
        state = o.getState();
    }

    public void setState(String state) {
   
        this.state = state;
    }

    public String getState() {
   
        return this.state;
    }
}
//负责人:保存备忘录,不能修改对象
public class Caretaker {
   
    private Memento memento;

    public Memento getMemento() {
   
        return memento;
    }

    public void setMemento(Memento memento) {
   
        this.memento = memento;
    }
}

应用实例:

image-20201122122126991

//象棋棋子类:原发器
class Chessman {
   
    private String label;
    private int x;
    private int y;

    public Chessman(String label, int x, int y) {
   
        this.label = label;
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值