设计模式:备忘录模式

模式概述

备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。

备忘录(Memento)模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。

应用实例: 1、后悔药。 2、打游戏时的存档。 3、Windows 里的 ctrl + z。 4、IE 中的后退。 5、数据库的事务管理。

模式结构

备忘录模式主要由三个部分组成:

发起人(Originator)角色:记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘录里的所有信息。
备忘录(Memento)角色:负责存储发起人的内部状态,在需要的时候提供这些内部状态给发起人。
管理者(Caretaker)角色:对备忘录进行管理,提供保存与获取备忘录的功能,但其不能对备忘录的内容进行访问与修改。

设计模式:备忘录模式_第1张图片

实现代码

发起人角色

public class Originator {
    private String state;
    public void setState(String state){
        this.state = state;
    }
    public String getState(){
        return state;
    }
    public Memento creaMemento(){
        return new Memento(state);
    }
    public void restoreMemento(Memento memento){
        this.setState(memento.getState());
    }
}

备忘录角色

public class Memento {
    private String state;
    public Memento(String state){
        this.state = state;
    }
    public void setState(String state){
        this.state = state;
    }
    public String getState(){
        return state;
    }
}

管理者角色

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

测试类(客户端)

public class Demo {
    public static void main(String[] args) {
        Originator originator = new Originator();
        Caretaker caretaker = new Caretaker();
        originator.setState("s1"); 
        caretaker.setMemento(originator.creaMemento()); // 保存状态
        System.out.println("state:" + originator.getState());
        originator.setState("s2");
        System.out.println("state:" + originator.getState());
        originator.restoreMemento(caretaker.getMemento()); // 恢复状态
        System.out.println("state:" + originator.getState());
    }

}

测试结果为:

state:s1
state:s2
state:s1

你可能感兴趣的:(设计模式,设计模式,备忘录模式,java)