Mẫu thiết kế - Mẫu vật lưu niệm
Memento pattern được sử dụng để khôi phục trạng thái của một đối tượng về trạng thái trước đó. Mẫu hình lưu niệm thuộc danh mục mẫu hành vi.
Thực hiện
Memento pattern sử dụng ba lớp diễn viên. Memento chứa trạng thái của một đối tượng được khôi phục. Originator tạo và lưu trữ trạng thái trong các đối tượng Memento và đối tượng Caretaker chịu trách nhiệm khôi phục trạng thái đối tượng từ Memento. Chúng tôi đã tạo các lớp Memento , Originator và CareTaker .
MementoPatternDemo , lớp demo của chúng tôi, sẽ sử dụng các đối tượng CareTaker và Originator để hiển thị việc khôi phục trạng thái đối tượng.
Bước 1
Tạo lớp Memento.
Memento.java
public class Memento {
private String state;
public Memento(String state){
this.state = state;
}
public String getState(){
return state;
}
}
Bước 2
Tạo lớp Originator
Originator.java
public class Originator {
private String state;
public void setState(String state){
this.state = state;
}
public String getState(){
return state;
}
public Memento saveStateToMemento(){
return new Memento(state);
}
public void getStateFromMemento(Memento memento){
state = memento.getState();
}
}
Bước 3
Tạo lớp CareTaker
CareTaker.java
import java.util.ArrayList;
import java.util.List;
public class CareTaker {
private List<Memento> mementoList = new ArrayList<Memento>();
public void add(Memento state){
mementoList.add(state);
}
public Memento get(int index){
return mementoList.get(index);
}
}
Bước 4
Sử dụng các đối tượng CareTaker và Originator .
MementoPatternDemo.java
public class MementoPatternDemo {
public static void main(String[] args) {
Originator originator = new Originator();
CareTaker careTaker = new CareTaker();
originator.setState("State #1");
originator.setState("State #2");
careTaker.add(originator.saveStateToMemento());
originator.setState("State #3");
careTaker.add(originator.saveStateToMemento());
originator.setState("State #4");
System.out.println("Current State: " + originator.getState());
originator.getStateFromMemento(careTaker.get(0));
System.out.println("First saved State: " + originator.getState());
originator.getStateFromMemento(careTaker.get(1));
System.out.println("Second saved State: " + originator.getState());
}
}
Bước 5
Xác minh kết quả đầu ra.
Current State: State #4
First saved State: State #2
Second saved State: State #3