메멘토 패턴은 행동 디자인 패턴입니다. 이 패턴은 객체 상태의 스냅숏을 만든 후 나중에 복원할 수 있도록 합니다.
메멘토는 함께 작동하는 객체의 내부 구조와 스냅숏들 내부에 보관된 데이터를 손상하지 않습니다.
복잡도:
인기도:
사용 사례들: 메멘토의 원칙은 직렬화를 사용하여 달성할 수 있으며, 이는 자바에서 매우 일반적입니다. 직렬화는 객체 상태의 스냅숏을 만드는 유일한 또는 가장 효율적인 방법은 아니나 다른 객체로부터 오리지네이터의 구조를 보호하면서 상태 백업을 저장할 수 있도록 합니다.
다음은 코어 자바 라이브러리로부터 가져온 패턴의 몇 가지 예시들입니다:
모양 편집기와 복잡한 실행 취소/다시 실행
이 그래픽 편집기를 사용하면 화면에서 모양의 색상과 위치를 변경할 수 있으며, 또 모든 수정을 취소 또는 반복할 수 있습니다.
'실행 취소'는 메멘토와 커맨드 패턴 간의 협업을 기반으로 합니다. 편집기는 수행된 커맨드들의 기록을 추적합니다. 커맨드를 실행하기 전에 편집기는 백업을 만든 후 커맨드 객체에 연결합니다. 커맨드를 실행 후 편집기는 커맨드를 기록으로 푸시합니다.
사용자가 실행 취소를 요청하면 편집기는 기록에서 최근 명령을 가져온 후 해당 명령 내부에 보관된 백업에서 상태를 복원합니다. 사용자가 다른 실행 취소를 요청하면 편집기는 다음 명령을 기록에서 가져옵니다.
실행 취소된 명령들은 사용자가 화면의 모양들을 수정할 때까지 기록에 보관됩니다. 이것은 실행 취소된 명령을 다시 실행하는 데 중요합니다.
editor
editor/Editor.java: 편집자 코드
editor/Canvas.java: 캔버스 코드
history
history/History.java: 기록은 커맨드들과 메멘토들을 저장합니다
history/Memento.java: 메멘토 클래스
commands
commands/Command.java: 기초 커맨드 클래스
commands/ColorCommand.java: 선택된 모양의 색상 변경
commands/MoveCommand.java: 선택된 모양을 이동합니다
shapes: 다양한 모양들
shapes/Shape.java
shapes/BaseShape.java
shapes/Circle.java
shapes/Dot.java
shapes/Rectangle.java
shapes/CompoundShape.java
Demo.java: 초기화 코드
OutputDemo.png: 스크린샷