【行为型模式】Java设计模式之:备忘录模式

备忘录模式(Memento Pattern)是一种行为型设计模式,它允许在不破坏封装性的前提下捕获一个对象的内部状态,并在对象之外保存这个状态。备忘录模式可以在需要时将对象恢复到先前的状态。

备忘录模式中通常包含以下角色:文章源自新逸网络-https://www.xinac.net/9366.html

1. 发起人(Originator):负责创建一个备忘录,并记录当前时刻的内部状态。文章源自新逸网络-https://www.xinac.net/9366.html

2. 备忘录(Memento):用于存储发起人的内部状态,在需要时可以将发起人恢复到先前的状态。文章源自新逸网络-https://www.xinac.net/9366.html

3. 管理者(Caretaker):负责存储备忘录对象,并提供对备忘录对象的访问和管理。文章源自新逸网络-https://www.xinac.net/9366.html

下面是一个简单的 Java 实现备忘录模式的示例:文章源自新逸网络-https://www.xinac.net/9366.html

// 备忘录类
class Memento {
    private String state;

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

    public String getState() {
        return state;
    }
}

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

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

    public String getState() {
        return state;
    }

    // 创建备忘录对象
    public Memento createMemento() {
        return new Memento(state);
    }

    // 恢复状态
    public void restoreMemento(Memento memento) {
        state = memento.getState();
    }
}

// 管理者类
class Caretaker {
    private Memento memento;

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

    public Memento getMemento() {
        return memento;
    }
}

// 客户端类
public class Client {
    public static void main(String[] args) {
        Originator originator = new Originator();
        originator.setState("状态1");

        // 创建备忘录并保存当前状态
        Caretaker caretaker = new Caretaker();
        caretaker.setMemento(originator.createMemento());

        // 修改状态
        originator.setState("状态2");

        // 恢复之前的状态
        originator.restoreMemento(caretaker.getMemento());
        System.out.println(originator.getState());
    }
}

在上面的示例中,发起人类用于记录当前时刻的内部状态,并且提供创建备忘录和恢复状态的方法。备忘录类用于存储发起人的内部状态,并且提供获取状态的方法。管理者类负责存储备忘录对象,并提供对备忘录对象的访问和管理。文章源自新逸网络-https://www.xinac.net/9366.html

备忘录模式的优点是可以在不破坏对象的封装性的前提下,保存和恢复对象的状态。同时,备忘录模式可以使得客户端与备忘录对象之间解耦,从而提高系统的灵活性和可扩展性。但是需要注意的是,由于备忘录模式需要保存对象的状态,因此可能会增加系统的内存消耗和复杂度。文章源自新逸网络-https://www.xinac.net/9366.html 文章源自新逸网络-https://www.xinac.net/9366.html

weinxin
新逸IT技术
扫一扫关注微信公众号
Admin
  • 本文由 发表于 2023-08-01
  • 转载请注明:https://www.xinac.net/9366.html
评论  0  访客  0
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定