Memento Pattern – khôi phục sau lỗi

1 min read

Memento Pattern là gì

Memento là một trong những Pattern thuộc nhóm hành vi (Behavior Pattern). 

Memento là mẫu thiết kế được sử dụng trong việc quản lý và lưu trữ trạng thái của một đối tượng để sau này có thể khôi phục lại trạng thái đó một cách dễ dàng.

Cài đặt Memento Pattern

Memento Pattern thường bao gồm các thành phần sau:

  1. Originator: Là đối tượng mà trạng thái cần lưu trữ và khôi phục.
  2. Memento: Đây là lớp đại diện cho trạng thái cần lưu trữ của đối tượng Originator. Memento này có thể lưu trữ thông tin của trạng thái hoặc một bản sao của nó.
  3. Caretaker: Là đối tượng chịu trách nhiệm lưu trữ và quản lý các phiên bản của Memento. Caretaker không biết về chi tiết bên trong của Memento và chỉ thao tác với chúng thông qua các phương thức được cung cấp.
import java.util.ArrayList;
import java.util.List;
 
class Originator {
    private String state;
 
    public void set(String state) {
        System.out.println("Originator: Setting state to " + state);
        this.state = state;
    }
 
    public Memento saveToMemento() {
        System.out.println("Originator: Saving to Memento.");
        return new Memento(this.state);
    }
 
    public void restoreFromMemento(Memento memento) {
        this.state = memento.getSavedState();
        System.out.println("Originator: State after restoring from Memento: " + state);
    }
 
    public static class Memento {
        private final String state;
 
        public Memento(String stateToSave) {
            state = stateToSave;
        }
 
        public String getSavedState() {
            return state;
        }
    }
}
 
class MementoExample {
    public static void main(String[] args) {
        List<Originator.Memento> savedStates = new ArrayList<>(); // caretaker
 
        Originator originator = new Originator();
        originator.set("State #1");
        originator.set("State #2");
        savedStates.add(originator.saveToMemento());
        originator.set("State #3");
        savedStates.add(originator.saveToMemento());
        originator.set("State #4");
 
        originator.restoreFromMemento(savedStates.get(1)); // This point need roll back
    }
}

Link tham khảo:

https://refactoring.guru/design-patterns/memento

Avatar photo

Leave a Reply

Your email address will not be published. Required fields are marked *