Memento Pattern
- 객체의 상태 저장을 위한 패턴
- 클래스 내부에 인스턴스 내부의 상태를 나타내는 역할을 도입해서 캡슐화의 파괴에 빠지지 않고 저장과 복원을 실행하는 패턴
- 커맨드 패턴과 비슷하니 잘 분리를 해서 사용해야함.
Ex. 직렬화 (Serialization), Date, snap shot. 자바 내부에서 거의 쓰이지 않는다.
- class Machine {
- private int state1;
- private int state2;
- private class Memento {
- int state1;
- int state2;
- }
- private List<Memento> backup = new ArrayList<>();
- public int createMemento() {
- Memento m = new Memento();
- m.state1 = this.state1;
- m.state2 = this.state2;
- backup.add(m);
- return backup.size() - 1; // 특정 토큰을 반환한다.
- }
- void restoreState(int token) {
- Memento m = backup.get(token); // 저장된 토큰으로 복구한다.
- this.state1 = m.state1;
- this.state2 = m.state2;
- // backup.remove(token); // 복구 시 삭제하는 것은 정책으로 결정.
- }
- void setState(int a, int b) {
- this.state1 = a;
- this.state2 = b;
- }
- @Override
- public String toString() {
- return "Machine [state1=" + state1 + ", state2=" + state2 + ", backup="
- + backup + "]";
- }
- }
- public class Ex2 {
- public static void main(String[] args) {
- Machine m = new Machine();
- m.setState(1, 2);
- System.out.println(m.toString());
- int token = m.createMemento();
- m.setState(30, 40); // 중간에 상태가 바뀌어도
- System.out.println(m.toString());
- m.restoreState(token); // 기억된 토큰으로 복구 시킬 수 있다.
- System.out.println(m.toString());
- }
- }
'java > design_pattern' 카테고리의 다른 글
Facade Pattern - 퍼사드 패턴 (0) | 2014.07.01 |
---|---|
Bridge Pattern - 브릿지 패턴 (0) | 2014.07.01 |
Command Pattern - 명령패턴 (0) | 2014.07.01 |
Proxy Pattern - 대리자 패턴 (0) | 2014.07.01 |
Iterator Pattern - 열거자 (0) | 2014.07.01 |