设计模式之备忘录

一.简介

备忘录模式能记录一个对象的内部状态,当用户后悔时能撤销当前操作,使数据恢复到它原先的状态。该模式又叫快照模式。

模式结构:

1.发起人(Originator)角色:记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘录里的所有信息。

2.备忘录(Memento)角色:负责存储发起人的内部状态,在需要的时候提供这些内部状态给发起人。

3.管理者(Caretaker)角色:对备忘录进行管理,提供保存与获取备忘录的功能,但其不能对备忘录的内容进行访问与修改。

二.实现

package com.vincent;


import java.util.*;

/**
 * 设计模式
 *
 */
public class App {
    public static void main( String[] args ) throws Exception{
        Originator originator = new Originator("状态#1");

        Caretaker caretaker = new Caretaker();
        caretaker.push(originator.createMemento());

        System.out.println(originator);

        originator.setState("状态#2");
        caretaker.push(originator.createMemento());
        System.out.println(originator);

        originator.restoreByMemento(caretaker.popFirst());
        System.out.println(originator);
    }
}


/**
 * 发起者
 */
class Originator{
    private String state;

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

    public String getState() {
        return state;
    }

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

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

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

    @Override
    public String toString() {
        return "Originator{" +
                "state='" + state + '\'' +
                '}';
    }
}


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

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

    public String getState() {
        return state;
    }

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


/**
 * 管理者
 */
class Caretaker{
    Deque<Memento> stack = new LinkedList<>();

    public void push(Memento memento){
        stack.addLast(memento);
    }

    public Memento pop(){
        return stack.removeLast();
    }

    public Memento popFirst(){
        return stack.removeFirst();
    }
}

实现效果:

在这里插入图片描述

三.总结

1.栈可以非常方便保存用户上一步操作状态

猜你喜欢

转载自blog.csdn.net/Zllvincent/article/details/107368375