반응형
디자인패턴
[Java][디자인 패턴] 21. 메멘토 패턴 (Memento Pattern)
메멘토 패턴은 상태의 객체를 저장하여 이전 상태로 복구하는 패턴이다.
메멘토 패턴이란?
- 메맨토 패턴은 중간 매개체를 통해 객체의 상태를 다른 객체에 저장했다가 복원하는 방법을 사용한다.
- 메멘토 패턴은 객체의 상태를 관리한다. 객체의 상태를 저장하고, 저장된 상태의 객체로 복원한다.
메멘토 패턴 구성요소
- 원조본(originator)
- 케어테이커(caretaker)
메멘토 패턴 코드
1. 상태 클래스 (TextWindowState)
public class TextWindowState {
private String text;
public TextWindowState(String text) {
this.text = text;
}
public String getText() {
return text;
}
}
2. 원조본(Originator)
public class TextWindow {
private StringBuilder currentText;
public TextWindow() {
this.currentText = new StringBuilder();
}
public String getCurrentText() {
return currentText.toString();
}
public void addText(String text) {
currentText.append(text);
}
public TextWindowState save() {
return new TextWindowState(currentText.toString());
}
public void restore(TextWindowState save) {
currentText = new StringBuilder(save.getText());
}
}
3. Caretaker (케어테이커)
public class TextEditor {
private TextWindow textWindow;
private TextWindowState savedTextWindow;
public TextEditor(TextWindow textWindow) {
this.textWindow = textWindow;
}
public void write(String text) {
textWindow.addText(text);
}
public String print() {
return textWindow.getCurrentText();
}
public void hitSave() {
savedTextWindow = textWindow.save();
}
public void hitUndo() {
textWindow.restore(savedTextWindow);
}
}
4. 테스트 코드
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
class TextEditorTest {
@Test
void givenTextEditor_whenAddTextSaveAddMoreAndUndo_thenSavecStateRestored() {
TextEditor textEditor = new TextEditor(new TextWindow());
textEditor.write("메멘토 패턴을 공부한다.\n");
textEditor.hitSave();
textEditor.write("오늘은 집중이 안되는 날이다.\n");
textEditor.hitUndo();
textEditor.write("언능 끝내고 자야겠다.\n");
textEditor.hitUndo();
assertThat(textEditor.print()).isEqualTo("메멘토 패턴을 공부한다.\n");
}
}
원본 코드
https://www.baeldung.com/java-memento-design-pattern
참고 자료
1.쉽게 바로 써먹는 디자인 패턴 책
http://www.yes24.com/Product/Goods/93173296
반응형
'개발 > 디자인패턴' 카테고리의 다른 글
[Java][디자인 패턴] 23. 전략 패턴 (Strategy Pattern) (0) | 2022.03.27 |
---|---|
[Java][디자인 패턴] 22. 템플릿 메서드 패턴 (1) | 2022.03.26 |
[Java][디자인 패턴] 20. 상태 패턴 (State Pattern) (0) | 2022.03.25 |
[Java][디자인 패턴] 19. 중재자 패턴 (Mediator Pattern) (0) | 2022.03.24 |
[Java][디자인 패턴] 18. 감시자 패턴 (Observer Pattern) (0) | 2022.03.22 |