pattern2018. 7. 24. 18:08

Memento pattern


-Memento -> 기념물

-behavioral pattern 중 하나

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

-3개의 actor class로 구성됨.



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

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

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



Main 호출 부분:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
1
2
3
4
5
6
7
8
9
10
11
public class CareTacker {
    private List<memento> mementoList = new ArrayList<>();
 
    public void add ( Memento state){
        mementoList.add( state);
    }
    public Memento get(int index){
        return mementoList.get(index);
    }
}
</memento>


상태를 저장하는 녀석
Memento.java
1
2
3
4
5
6
7
8
9
10
public class Memento {
    private String state;
    public Memento( String state ){
        this.state=state;
    }
     
    public String getState() {
        return state;
    }
}


Memento로부터 현상태를 복원하거나, Memento로 현상태를 저장함.
Originator.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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();
    }
}<font face="맑은 고딕, sans-serif"><span style="white-space: normal;">
</span></font>
결과:

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

출처 : 


'pattern' 카테고리의 다른 글

uml 화살표 의미  (0) 2020.07.31
Observer pattern  (0) 2018.07.25
Mediator pattern  (0) 2018.07.24
Iterator Pattern  (0) 2018.07.24
Interpreter pattern  (0) 2018.07.20
Posted by easy16