[자바 디자인 패턴] 행동패턴 - 메멘토 패턴
행동패턴 목록
- 책임연쇄 패턴 (Chan of Responsibility Pattern)
- 커맨드 패턴 (Command Pattern)
- 해석자 패턴 (Interpreter Pattern)
- 반복자 패턴 (Iterator Pattern)
- 중재자 패턴 (Mediator Pattern)
- 메멘토 패턴 (Memento Pattern)
- 관찰자 패턴 (Observer Pattern)
- 상태 패턴 (State Pattern)
- 전략 패턴 (Strategy Pattern)
- 템플릿 패턴 (Template Pattern)
상태를 저장하고 복원하는 기능이 필요한 경우에 사용하면 유용할 듯 하다.
장점
- 캡슐화 경계를 유지합니다.
- 발신자를 단순화합니다.
사용시기
- 실행 취소 작업을 구현하는데에 쓰입니다.
- 대부분의 소프트웨어에서 실행취소 및 재실행 작업에 사용됩니다.
- 데이터베이스 트랜잭션에도 사용됩니다.
UML
Memento Class : Memento
- 발신자 객체의 내부 상태를 저장합니다. 상태는 여러 상태 변수를 포함할 수 있습니다.
- Memento에는 관리인에 대한 인터페이스인 두개의 인터페이스가 있어야 합니다. 이 인터페이스는 메멘토가 저장한
내부 상태에 대한 작업이나 액세스를 허용해서는 안되므로 캡슐화를 유지해야 합니다. 다른 인터페이스는 Originator
이며 Originator는 작성자가 이전 상태를 복원하는 데 필요한 상태변수에 액세스 할 수 있도록 합니다.
public class Memento {
private String state;
public Memento(String state) {
this.state=state;
}
public String getState() {
return state;
}
}
Originator Class : Originator
- Originator의 내부상태를 캡쳐할 Memento 오브젝트를 생성합니다.
- Memento 오브젝트를 사용하여 이전상태를 복원합니다.
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();
}
}
Caretaker Class : Caretaker
- Memento를 유지할 책임이 있습니다.
- Memento는 Caretaker에 투명하며 Caretaker가 Memento를 조작하지 않아야 합니다. (유지만)
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);
}
}
Operation Class : MementoPatternDemo
public class MementoPatternDemo {
public static void main(String[] args) {
// 객체 생성
Originator originator = new Originator();
Caretaker careTaker = new Caretaker();
// 상태설정 및 복원시점 추가
originator.setState("State #1");
careTaker.add(originator.saveStateToMemento());
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());
originator.getStateFromMemento(careTaker.get(2));
System.out.println("Third saved State: " + originator.getState());
}
}
'JAVA > Design Patterns' 카테고리의 다른 글
[자바 디자인 패턴] 행동패턴 - 템플릿 패턴 (0) | 2021.03.16 |
---|---|
[자바 디자인 패턴] 행동패턴 - 전략 패턴 (0) | 2021.03.15 |
[자바 디자인 패턴] 행동패턴 - 상태 패턴 (0) | 2021.03.15 |
[자바 디자인 패턴] 행동패턴 - 관찰자 패턴 (0) | 2021.03.15 |
[자바 디자인 패턴] 행동패턴 - 중재자 패턴 (0) | 2021.03.15 |
[자바 디자인 패턴] 행동패턴 - 반복자 패턴 (0) | 2021.03.15 |
[자바 디자인 패턴] 행동패턴 - 해석자 패턴 (0) | 2021.03.15 |
[자바 디자인 패턴] 행동패턴 - 커맨드 패턴 (0) | 2021.03.15 |