![메멘토](/images/patterns/cards/memento-mini.png?id=8b2ea4dc2c5d15775a654808cc9de099)
Go로 작성된 메멘토
메멘토 패턴은 행동 디자인 패턴입니다. 이 패턴은 객체 상태의 스냅숏을 만든 후 나중에 복원할 수 있도록 합니다.
메멘토는 함께 작동하는 객체의 내부 구조와 스냅숏들 내부에 보관된 데이터를 손상하지 않습니다.
개념적인 예시
메멘토 패턴은 객체의 상태에 대한 스냅숏들을 저장할 수 있도록 하며 당신은 이러한 스냅숏들을 사용하여 객체를 이전 상태로 되돌릴 수 있습니다. 이 패턴은 객체에 대한 실행 취소-다시 실행 작업을 구현해야 할 때 편리합니다.
originator.go: 오리지네이터
package main
type Originator struct {
state string
}
func (e *Originator) createMemento() *Memento {
return &Memento{state: e.state}
}
func (e *Originator) restoreMemento(m *Memento) {
e.state = m.getSavedState()
}
func (e *Originator) setState(state string) {
e.state = state
}
func (e *Originator) getState() string {
return e.state
}
memento.go: 메멘토
package main
type Memento struct {
state string
}
func (m *Memento) getSavedState() string {
return m.state
}
caretaker.go: 케어테이커
package main
type Caretaker struct {
mementoArray []*Memento
}
func (c *Caretaker) addMemento(m *Memento) {
c.mementoArray = append(c.mementoArray, m)
}
func (c *Caretaker) getMemento(index int) *Memento {
return c.mementoArray[index]
}
main.go: 클라이언트 코드
package main
import "fmt"
func main() {
caretaker := &Caretaker{
mementoArray: make([]*Memento, 0),
}
originator := &Originator{
state: "A",
}
fmt.Printf("Originator Current State: %s\n", originator.getState())
caretaker.addMemento(originator.createMemento())
originator.setState("B")
fmt.Printf("Originator Current State: %s\n", originator.getState())
caretaker.addMemento(originator.createMemento())
originator.setState("C")
fmt.Printf("Originator Current State: %s\n", originator.getState())
caretaker.addMemento(originator.createMemento())
originator.restoreMemento(caretaker.getMemento(1))
fmt.Printf("Restored to State: %s\n", originator.getState())
originator.restoreMemento(caretaker.getMemento(0))
fmt.Printf("Restored to State: %s\n", originator.getState())
}
output.txt: 실행 결과
originator Current State: A
originator Current State: B
originator Current State: C
Restored to State: B
Restored to State: A