1) 개요
메맨토 패턴은 객체의 상태 정보를 가지는 클래스를 따로 생성하여, 객체의 상태를 저장하거나 이전 상태로 복원할 수 있게 해주는 패턴입니다. 메멘토 패턴은 바둑, 오목, 체스 등의 보드게임 등에서 '무르기' 기능을 구현할 때 사용되기도 합니다.
단, 이전 상태의 객체를 저장하기 위한 Originator가 클 경우 많은 메모리가 필요합니다.
2) UML
- Originator : 객체의 상태를 저장합니다. Memento 객체를 생성하며 후에 Memento를 사용하여 실행 취소(undo)를 할 수 있습니다.
- Memento : Originator의 상태를 유지하는 객체입니다.(POJO)
- Caretaker : 마치 게임의 세이브포인트처럼 복수의 Memento의 상태를 유지해주는 객체입니다.
3) 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | public class Life { private String time; public void setTime(String time) { System.out.println("Setting Time : " + time); this.time = time; } public Memento saveToMemento() { System.out.println("Saving time to Memento"); return new Memento(time); } public void restoreFromMemento(Memento memento) { time = memento.getSavedTime(); System.out.println("Time restored from Memento : " + time); } public static class Memento { private final String time; public Memento(String timeToSave) { this.time = timeToSave; } public String getSavedTime() { return time; } } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class Design { public static void main(String[] args) { List<Life.Memento> savedTimes = new ArrayList<Life.Memento>(); Life life = new Life(); life.setTime("1000 B.C."); savedTimes.add(life.saveToMemento()); life.setTime("1000 A.D."); savedTimes.add(life.saveToMemento()); life.setTime("2000 A.D."); savedTimes.add(life.saveToMemento()); life.setTime("4000 A.D."); savedTimes.add(life.saveToMemento()); life.restoreFromMemento(savedTimes.get(0)); } } | cs |
'IT > 디자인 패턴(Design Pattern)' 카테고리의 다른 글
[디자인 패턴] 템플릿메소드 패턴(TemplateMethod Pattern) (0) | 2019.02.14 |
---|---|
[디자인 패턴] 방문자 패턴(Visitor Pattern) (2) | 2019.02.14 |
[디자인 패턴] 중재자 패턴(Mediator Pattern) (0) | 2019.02.12 |
[디자인 패턴] 이터레이터 패턴(Iterator Pattern) (0) | 2019.02.11 |
[디자인 패턴] 커맨드 패턴(Command Pattern) (0) | 2019.02.08 |