Skip to content

Latest commit

 

History

History
56 lines (41 loc) · 1.54 KB

File metadata and controls

56 lines (41 loc) · 1.54 KB

Memento

Memento interfaces for Java.

<dependency>
    <groupId>org.open-structures</groupId>
    <artifactId>memento</artifactId>
    <version>1.0.0</version>
</dependency>

A set of interfaces to save the state of the object so that it can be restored later.

Here's an example of the Message which state can be "saved":

public class Message implements Restorable<Message.MessageSnapshot> {
    private StringBuilder stringBuilder = new StringBuilder();

    public void addLine(String l){
        stringBuilder.append(l).append("\n");
    }

    public String getContents(){
        return stringBuilder.toString();
    }

    @Override
    public MessageSnapshot getState() {
        return new MessageSnapshot(getContents());
    }

    @Override
    public void restore(MessageSnapshot state) {
        stringBuilder = new StringBuilder(state.msgContents);
    }

    public static class MessageSnapshot implements Memento{
        private final String msgContents;

        private MessageSnapshot(String msgContents) {
            this.msgContents = msgContents;
        }
    }
}

Here's how we can save and restore the message to its previous state:

Message msg = new Message();
msg.addLine("What is Pi?");
Message.MessageSnapshot saved = msg.getState();
msg.addLine("Three. More or less.");
msg.restore(saved);
msg.getContents(); // What is Pi?