상태정보 저장이 목적
undo, redo 같은 기능을 실행 하기 위해선 변경된 정보 , 심할 경우 변경된 상태의 전체 정보를
따로 저장 관리하는 클래스를 두는 것을 memento 패턴이라 한다
일반적으로 필요한 정보만 따로 모아 관리 하는 것을 말한다
행동:
저장할 필요 정보를 memento 에 저장했다가 다시 돌리고 싶을때 memento 에서 다시 불러온다
또한 해당 객체 상태를 직접 접근하는 것이 어려운 경우 상태 정보를 memento 로 빼놓아
클라이언트가 객체의 은닉성을 깨트리지 않고 상태 정보를 알기 위해 memento 로 저근하는 상황에서도 사용 될 수 있다
이처럼 직접 접근하지 못하게 경계 역할도 할 수 있다
하지만 원래 memento 에 상태를 저장하는 객체는 memento 객체를 마음대로 다루길 원함으로
friend 로 선언해 주는 것도 좋다
하지만 다른 것이 접근할때는 private 로 선언하는게 좋다
모든 값을 다 저장해서 가지고 있으면 비효율적이므로 변경된 부분만 관리 한다( 이부분 설계가 관건)
지나치게 memento 에 다른 클라이언트가 접근해 모두 막 상태를 바꾸는 구조는 좋지 않다
redo/undo 같은 경우 메모리가 많이 커질 수 있음으로 횟수의 제한을 두는 것이 좋다
command 패턴과 memento 패턴을 같이 사용하여 명령을 memento 에 저장해 놓으면 효과적이다
memento 할(저장할) 단위 설정이 중요
단위가너무 작으면 저장된는 것이 많아 질 수 있다
'디자인패턴과방법론 > 디자인패턴' 카테고리의 다른 글
state 패턴 (0) | 2012.11.02 |
---|---|
Observer 패턴 (0) | 2012.11.02 |
iterator 패턴, 스택제거시 삭제되는 포인터(like 스마트포인터) (0) | 2012.11.02 |
interpreter 패턴 (0) | 2012.11.02 |
command 패턴 (0) | 2012.11.02 |