美文网首页
行为型模式:19-备忘录模式

行为型模式:19-备忘录模式

作者: 综合楼 | 来源:发表于2021-06-17 20:12 被阅读0次

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

image.png

在备忘录模式结构图中包含如下几个角色:

● Originator(原发器):它是一个普通类,可以创建一个备忘录,并存储它的当前内部状
态,也可以使用备忘录来恢复其内部状态,一般将需要保存内部状态的类设计为原发器。

●Memento(备忘录):存储原发器的内部状态,根据原发器来决定保存哪些内部状态。备忘录
的设计一般可以参考原发器的设计,根据实际需要确定备忘录类中的属性。需要注意的是,
除了原发器本身与负责人类之外,备忘录对象不能直接供其他类使用,原发器的设计在不同
的编程语言中实现机制会有所不同。

●Caretaker(负责人):负责人又称为管理者,它负责保存备忘录,但是不能对备忘录的内容
进行操作或检查。在负责人类中可以存储一个或多个备忘录对象,它只负责存储对象,而不
能修改对象,也无须知道对象的实现细节。

image.png
public class UserInfoDTO {
    private String account;
    private String password;
    private String telNo;

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getTelNo() {
        return telNo;
    }

    public void setTelNo(String telNo) {
        this.telNo = telNo;
    }

    public Memento saveMemento() {
        return new Memento(account, password, telNo);
    }

    public void restoreMemento(Memento memento) {
        this.account = memento.getAccount();
        this.password = memento.getPassword();
        this.telNo = memento.getTelNo();
    }

    public void show() {
        System.out.println("Account:" + this.account);
        System.out.println("Password:" + this.password);
        System.out.println("TelNo:" + this.telNo);
    }
}
class Memento {
    private String account;
    private String password;
    private String telNo;

    public Memento(String account, String password, String telNo) {
        this.account = account;
        this.password = password;
        this.telNo = telNo;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getTelNo() {
        return telNo;
    }

    public void setTelNo(String telNo) {
        this.telNo = telNo;
    }
}
public class Caretaker {
    private Memento memento;

    public Memento getMemento() {
        return memento;
    }

    public void setMemento(Memento memento) {
        this.memento = memento;
    }
}
public class Client {
    public static void main(String a[]) {
        UserInfoDTO user = new UserInfoDTO();
        Caretaker c = new Caretaker();

        user.setAccount("zhangsan");
        user.setPassword("123456");
        user.setTelNo("13000000000");
        System.out.println("状态一:");
        user.show();
        c.setMemento(user.saveMemento());//保存备忘录
        System.out.println("---------------------------");

        user.setPassword("111111");
        user.setTelNo("13100001111");
        System.out.println("状态二:");
        user.show();
        System.out.println("---------------------------");

        user.restoreMemento(c.getMemento());//从备忘录中恢复
        System.out.println("回到状态一:");
        user.show();
        System.out.println("---------------------------");
    }
}
image.png
image.png

相关文章

网友评论

      本文标题:行为型模式:19-备忘录模式

      本文链接:https://www.haomeiwen.com/subject/xsyieltx.html