1) 메멘토(Memento) 객체에 원조본(Originator) 객체가 가진 내부 상태의 스냅샷을 저장
2) 원조본에서 복구, 실행 취소를 할때 메멘토에게 이전 상태를 요청할 수 있음
package memento;
public class Originator {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public Memento saveStateToMemento() {
return new Memento(state);
}
public void getStateFromMemento(Memento memento) {
state = memento.getState();
}
}
package memento;
public class Memento {
private String state;
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
package memento;
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);
}
}
package memento;
public class Main {
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());
}
}
Current State : state #4
First saved State : state #2
Second saved State : state #3
⇒ 제한범위 인터페이스 : 다른 객체들에게 제공할 서비스 정의(Public만 접근 가능)
⇒ 광범위 인터페이스 Originator 클래스에게 제공하는 서비스