首页 > 其他分享 >备忘录模式

备忘录模式

时间:2024-09-17 15:16:02浏览次数:8  
标签:Originator 状态 模式 备忘录 state public Memento

备忘录模式

备忘录模式(Memento Pattern)是一种行为型设计模式,用于保存和恢复对象的内部状态,而不暴露对象的实现细节。这种模式使得对象能够恢复到之前的状态,从而支持撤销和恢复操作。

主要角色

  1. 发起人(Originator)
    • 负责创建一个包含自身内部状态的备忘录对象,并可以使用备忘录恢复状态。
  2. 备忘录(Memento)
    • 用于存储发起人的内部状态。它通常是一个不可修改的对象,保存了发起人的状态数据。
  3. 管理者(Caretaker)
    • 负责保存备忘录对象,但不对备忘录的内容进行操作。它只是负责备忘录的管理,如保存和恢复。

工作流程

  1. 保存状态
    • 发起人创建一个备忘录对象,将自身的内部状态保存到备忘录中,并返回给管理者。
  2. 恢复状态
    • 当需要恢复到之前的状态时,发起人使用备忘录对象恢复内部状态。

示例

// 发起人
public class Originator {
    private String state;

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

    public String getState() {
        return state;
    }

    public Memento saveToMemento() {
        return new Memento(state);
    }

    public void restoreFromMemento(Memento memento) {
        this.state = memento.getState();
    }

    // 备忘录(Memento)
    public static class Memento {
        private final String state;

        private Memento(String state) {
            this.state = state;
        }

        private String getState() {
            return state;
        }
    }
}
// 管理者(Caretaker)
public class Caretaker {
    private Originator.Memento memento;

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

    public Originator.Memento retrieveMemento() {
        return memento;
    }
}

//test
public class TestMementoPattern {

    public static void main(String[] args) {
        // 创建发起人对象
        Originator originator = new Originator();

        // 创建负责人对象
        Caretaker caretaker = new Caretaker();

        // 设置初始状态
        originator.setState("忘不掉");
        System.out.println("Initial State: " + originator.getState());

        // 保存当前状态到备忘录
        caretaker.saveMemento(originator.saveToMemento());

        // 修改状态
        originator.setState("不知道,也许");
        System.out.println("Modified State: " + originator.getState());

        // 从备忘录恢复状态
        originator.restoreFromMemento(caretaker.retrieveMemento());
        System.out.println("Restored State: " + originator.getState());
    }
}

发起人(Originator)

  • setStategetState 方法用于设置和获取发起人的状态。
  • saveToMemento 方法创建一个备忘录对象,保存当前状态。
  • restoreFromMemento 方法使用备忘录恢复之前的状态。
  • 内部静态类 Memento 用于封装发起人的状态,并提供一个访问方法 getState

管理者(Caretaker)

  • saveMemento 方法保存一个备忘录对象。
  • retrieveMemento 方法检索保存的备忘录对象。

测试类(TestMementoPattern)

  • 创建 OriginatorCaretaker 对象。
  • 设置初始状态,保存到备忘录,修改状态,最后从备忘录恢复状态并打印结果。

优点

  • 封装性:备忘录模式避免了暴露发起人的内部状态。
  • 撤销/恢复功能:支持对象状态的回溯和恢复。

缺点

  • 开销:备忘录可能会增加存储和管理开销,特别是在保存大量状态时。
  • 复杂性:可能会引入额外的复杂性,需要额外的类和管理代码。

备忘录模式在需要状态恢复的场景中非常有用,比如撤销操作、历史记录管理等。

标签:Originator,状态,模式,备忘录,state,public,Memento
From: https://www.cnblogs.com/20lxj666/p/18396281

相关文章

  • 中介者模式
    中介者模式中介者模式(MediatorPattern)是一种行为型设计模式,用于减少多个对象或类之间复杂的交互依赖。通过引入一个中介者对象,所有对象之间的通信不再直接进行,而是通过中介者来协调和管理,从而降低对象之间的耦合度。这使得系统更易于扩展和维护,因为对象之间的关系可以通过修改中......
  • 迭代器模式
    迭代器模式迭代器模式(IteratorPattern)是一种行为设计模式,旨在提供一种方法顺序访问一个聚合对象(如列表、集合)中的各个元素,而无需暴露其内部表示。这种模式的核心是将遍历行为封装在迭代器对象中,使得客户端代码可以统一地处理不同类型的集合或容器。主要角色迭代器接口(Iterato......
  • 解释器模式
    解释器模式解释器模式(InterpreterPattern)是一种行为设计模式,它定义了一种用于解释和执行语言或表达式的语法表示方法。该模式的主要目的是让语言的语法易于扩展和修改。解释器模式的结构解释器模式通常由以下几个部分组成:抽象表达式(AbstractExpression):定义一个解释操作的接......
  • 观察者模式
    观察者模式观察者模式(ObserverPattern)是一种设计模式,用于建立对象之间的一对多依赖关系。这种模式使得当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。这种模式通常用于实现事件处理系统或消息通知系统。在观察者模式中,有两个主要角色:被观察者(Subject......
  • 访问者模式
    访问者模式“访问者模式”通常是指软件开发中的一种设计模式,也叫做“Visitor模式”。它属于行为型设计模式之一,主要用于将数据结构和操作解耦。通过使用访问者模式,可以在不修改数据结构的前提下,定义新的操作。访问者模式的基本思想是:你有一个包含不同对象的对象结构(例如一个元素......
  • 模板方法模式
    模板方法模式模板方法模式(TemplateMethodPattern)是一种行为设计模式,它定义了一个算法的骨架,并允许子类在不改变算法结构的情况下重写算法的某些步骤。通过这种模式,能够复用算法的整体流程,同时又能够灵活调整某些具体步骤的实现。模板方法模式的关键要素抽象类(AbstractClass......
  • 策略模式
    策略模式策略模式(StrategyPattern)是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互换。这种模式允许算法在不影响客户端的情况下变化,从而提高了代码的灵活性和可维护性。策略模式的组成策略模式由以下几个部分组成:抽象策略(Strategy):这是一个接口或抽象......
  • 命令模式
    命令模式命令模式(CommandPattern)是行为型设计模式之一,它将请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,以及对请求排队或记录请求日志等操作。通过使用命令模式,命令的发出者与命令的执行者可以完全解耦。命令模式的结构Command(命令接口/抽象类):定义了执行命令......
  • 责任链模式
    责任链模式责任链模式(ChainofResponsibilityPattern)是一种行为设计模式,它允许多个对象有机会处理请求,从而避免请求的发送者和接收者之间的耦合。这个模式将请求的处理者连接成一条链,沿着这条链传递请求,直到某个处理者处理它为止。责任链模式的主要角色:抽象处理者(Handler):定......
  • 简单工厂模式
    简单工厂模式简单工厂模式(SimpleFactoryPattern)是一种创建型设计模式,通过一个工厂类来决定实例化哪一个类的对象。它是最常见的设计模式之一,主要用于将对象的创建与使用分离,减少代码重复,提高代码的可维护性。特点工厂角色:负责创建具体产品类的实例,通常是一个包含静态方法的......