메멘토(Memento) 패턴: 행위패턴
객체의 상태 정보를 저장하고 사용자의 필요에 의하여 원하는 시점의 데이터를 복원 할 수 있는 패턴
특정 시점에서의 객체 내부 상태를 객체화함으로써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공하는 패턴. 포토샵 되돌리기나 뒤로가기를 떠올리면 이해가 쉬울 것이다.
- Originator : 현재 상태를 표현하는 State를 가지고 있으며, Memento 객체를 통해 현재 상태를 변경
- Memento : Originator의 상태를 나타내는 클래스, Memento를 이용하여 Originator의 상태를 변경
- CareTaker : Memento를 순서대로 저장하여 관리하는 클래스, Stack이나 List 같은 자료구조를 사용해도 무방
PhotoShap(Originator)
package behavioral.memento;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class PhotoShap {
private String status;
public PhotoShap(String status) {
this.status = status;
}
public Memento createMemento(){
return new Memento(status);
}
public void restoreMemento(Memento memento){
this.status = memento.getStatus();
}
}
Memento
package behavioral.memento;
import lombok.Getter;
@Getter
public class Memento {
private String status;
public Memento(String status) {
this.status = status;
}
}
CareTaker
package behavioral.memento;
import java.util.Stack;
public class CareTaker {
Stack<Memento> mementos = new Stack<>();
public void push(Memento memento){
mementos.push(memento);
}
public Memento pop(){
return mementos.pop();
}
}
MementoClient
package behavioral.memento;
public class MementoClient {
public static void main(String[] args) {
PhotoShap photoShap = new PhotoShap("네모그리기");
CareTaker careTaker = new CareTaker();
careTaker.push(photoShap.createMemento());
System.out.println(photoShap.getStatus());
photoShap.setStatus("세모그리기");
System.out.println(photoShap.getStatus());
photoShap.restoreMemento(careTaker.pop());
System.out.println(photoShap.getStatus());
}
}
'OOP > Design Pattern' 카테고리의 다른 글
19. 스테이트(State) 패턴 (0) | 2023.03.01 |
---|---|
18. 옵저버(Observer) 패턴 (0) | 2023.02.25 |
16. 중재자(Mediator) 패턴 (0) | 2023.02.21 |
15. 이터레이터(iterator) 패턴 (0) | 2023.02.21 |
14. 인터프리터(Interpreter) 패턴 (0) | 2023.02.21 |