Radio

一个小小程序员

0%

备忘录模式

备忘录模式

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

比如:Windows 里的 ctrl + z;浏览器的后退; 数据库的事务管理等

示例演示:
  1. 我们创建三个类,一个people类,包含一个status状态的字段,一个存储people状态的类,一个获取people状态的类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    package test.memento;

    import lombok.Data;

    @Data
    public class People {
    private String status;

    public People(String status) {
    this.status = status;
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    package test.memento;

    import lombok.Data;

    @Data
    public class PeopleStatusSave {
    private String status;

    public People saveStatus() {
    return new People(status);
    }

    public void getStatus(People people) {
    status = people.getStatus();
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    package test.memento;

    import java.util.ArrayList;
    import java.util.List;

    public class PeopleRecover {
    private List<People> peopleList = new ArrayList<>();

    public void add(People people) {
    peopleList.add(people);
    }

    public People get(int index) {
    return peopleList.get(index);
    }

    }
  2. 完成上述步骤,我们就可以开始演示了

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    package test.memento;

    public class MementoDemo {
    public static void main(String[] args) {
    PeopleStatusSave peopleStatus = new PeopleStatusSave();
    PeopleRecover peopleRecover = new PeopleRecover();

    peopleStatus.setStatus("11111");
    peopleRecover.add(peopleStatus.saveStatus());

    peopleStatus.setStatus("22222");
    peopleRecover.add(peopleStatus.saveStatus());

    peopleStatus.setStatus("33333");
    peopleRecover.add(peopleStatus.saveStatus());

    peopleStatus.setStatus("44444");
    peopleRecover.add(peopleStatus.saveStatus());

    System.out.println("current: " + peopleStatus.getStatus());

    peopleStatus.getStatus(peopleRecover.get(0));
    System.out.println("first: "+ peopleStatus.getStatus());

    peopleStatus.getStatus(peopleRecover.get(1));
    System.out.println("second: "+ peopleStatus.getStatus());

    }
    }

    运行结果:

    1
    2
    3
    current: 44444
    first: 11111
    second: 22222
说明:

优点: 1、给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。 2、实现了信息的封装,使得用户不需要关心状态的保存细节。

缺点:消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。

欢迎关注我的其它发布渠道