메멘토 패턴은 객체를 이전 상태로 되돌릴 수 있는 기능을 제공하는 디자인 패턴이다.
메멘토 패턴은 3개의 객체로 구현된다: 오리지네이터(originator), 케어테이커(caretaker), 메멘토(memento).
- 오리지네이터는 내부 상태를 보유하고 있는 일부 객체이다.
- 케어테이커는 오리지네이터에 대해 어떤 상태 변경을 처리하지만, 변경에 대한 실행 취소(원복) 하기를 원한다. 케어테이커는 먼저 오리지네이터에게 메멘토 객체를 요청한다. 그 뒤 예정된 일련의 명령을 수행한다.
- 이전의 상태로 되돌리기 위해 메멘토 객체에게 기존 상태를 요청해서 오리지네이터에 반환한다.
메멘토 패턴은 본래의 클래스(Originator)의 복잡도는 증가시키지 않으면서 객체의 저장 및 복구 기능은 구현하는 것으로 상태의 보관, 복구는 메멘토 객체에서 담당합니다.
오리지네이터(originator)
사전적 의미 : 창작자, 창설자, 창시자, 발기인, 시조
역할 : 상태를 가지고 있는 객체
케어테이커(caretaker)
사전적 의미 : 경비원, 관리인, 돌보는 사람
역할 : 상태를 관리하는 객체
메멘토(memento)
사전적 의미 : 기념품 (사람·장소를 기억하기 위한)
역할 : 상태
import java.util.List;
import java.util.ArrayList;
class Originator {
private String state;
// The class could also contain additional data that is not part of the
// state saved in the memento..
public void set(String state) {
this.state = state;
System.out.println("Originator: Setting state to " + 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;
}
// accessible by outer class only
private String getSavedState() {
return state;
}
}
}
class Caretaker {
public static void main(String[] args) {
List<Originator.Memento> savedStates = new ArrayList<Originator.Memento>();
Originator originator = new Originator();
originator.set("State1");
originator.set("State2");
savedStates.add(originator.saveToMemento());
originator.set("State3");
// We can request multiple mementos, and choose which one to roll back to.
savedStates.add(originator.saveToMemento());
originator.set("State4");
originator.restoreFromMemento(savedStates.get(1));
}
}
/*
>>Terminal
Originator: Setting state to State1
Originator: Setting state to State2
Originator: Saving to Memento.
Originator: Setting state to State3
Originator: Saving to Memento.
Originator: Setting state to State4
Originator: State after restoring from Memento: State3
*/
'프로그래밍 > OOP_Pattern_TDD' 카테고리의 다른 글
IntelliJ에서 TDD 개발 환경 준비 (0) | 2022.08.03 |
---|---|
디자인패턴 프로토타입 패턴 (Prototype Pattern) (0) | 2022.08.02 |
디자인패턴 중재자 패턴 (Mediator Pattern) (0) | 2022.08.01 |
디자인패터 플라이웨이트 패턴 (Flyweight pattern) (0) | 2022.08.01 |
디자인패턴 책임 연쇄 패턴 (chain-of-responsibility pattern) (0) | 2022.08.01 |