pattern

Memento pattern

easy16 2018. 7. 24. 18:08

Memento pattern


-Memento -> 기념물

-behavioral pattern 중 하나

-이전 상태를 복구하기 위해 사용되는 패턴.

-3개의 actor class로 구성됨.



Memento : restore 위한 상태를 포함하는 객체

Originator : Memento객체로 state를 만들고 저장하는 객체.

CareTaker : Memento로 부터 객체 상태를 복구하는 역할.



Main 호출 부분:


        Originator originator = new Originator();
        CareTacker careTacker = new CareTacker();

        originator.setState("State #1");
        originator.setState("State #2");
        careTacker.add(originator.saveStateToMemento());


        originator.setState("Stage #3");
        careTacker.add(originator.saveStateToMemento());

        originator.setState("Stage #4");
        careTacker.add(originator.saveStateToMemento());

        originator.getStateFromMemento(careTacker.get(0));

        for (int i =0 ; careTracker.get(i)!=null;++i){
            originator.getStateFromMemento(careTacker.get(i));
            Log.d("hello","state :"+ originator.getState() );
        }


Memento 객체들을 관리함.

CareTacker.java
public class CareTacker {
    private List mementoList = new ArrayList<>();

    public void add ( Memento state){
        mementoList.add( state);
    }
    public Memento get(int index){
        return mementoList.get(index);
    }
}


상태를 저장하는 녀석
Memento.java
public class Memento {
    private String state;
    public Memento( String state ){
        this.state=state;
    }
    
    public String getState() {
        return state;
    }
}


Memento로부터 현상태를 복원하거나, Memento로 현상태를 저장함.
Originator.java
public class Originator {
    private String state;

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public Memento saveStateToMemento(){
        return new Memento(state);
    }

    public void getStateFromMemento(Memento memento){
        state=memento.getState();
    }
}
결과:

07-24 17:59:38.636 10010 10010 D hello   : state :State #2
07-24 17:59:38.636 10010 10010 D hello   : state :Stage #3
07-24 17:59:38.636 10010 10010 D hello   : state :Stage #4

출처 :