메멘토 패턴 UML
care taker : 메멘토를 관리하는 객체(보통 Client)가 된다.
originator : 메멘토를 생성하는 객체 (본인의 상태를 복사해서 넘겨준다)
memento : originator에서만 접근 가능하고 originator 상태의 snapshot 형태이다.
Feature
- 메멘토 생성의 책임은 순간 상태를 복사해서 저장하려는 객체가 가진다. 그 외에 누구도 객체 생성에 관여할 수 없다.
- 상태를 가진 객체는 메멘토를 생성하거나 적용해서 상태를 적용할 수 있을 뿐 메멘토 자체를 관리하지는 않는다.
- Care Taker는 클라이언트로 메멘토를 요청해서 관리한다.
예제
우아한 테크코스 racing car 예제의 일부분이다.
요구사항
- List 형태로 차의 이름을 입력받으면 차를 생성한다.
- 시도 횟수를 받으면 Simulation을 실행한다. 이 때 모든 차들의 시뮬레이션 과정을 출력한다.
- 차 객체는 name과 position을 가진다.
2번의 차들의 시뮬레이션 과정은 순간 상태를 snapshot 형태로 출력해야하므로 이 부분을 메멘토 패턴을 활용해본다.
객체 협력 관계
- 차에서 시뮬레이터에게 시뮬레이션을 요청한다. 이때 시뮬레이터는 시뮬레이션을 실행하면 상태가 변한다.
- CarService는 Simulator에게 simulation을 요청하고 그 이후 memento를 요청한다. 그러면 simulation은 차의 정보에 대한 메멘토를 생성하고 CarService에게 돌려준다.
- CarService는 History에게 스냅샷 상태를 저장할 것을 요청한다.
여기서 Simulator는 Originator, Car service 는 careTaker, Car snapshot은 memento가 된다.
소스코드
https://github.com/E1psycongr00/memento_pattern