implemented memento pattern
This commit is contained in:
39
behavioral/memento/memento.go
Normal file
39
behavioral/memento/memento.go
Normal file
@@ -0,0 +1,39 @@
|
||||
package memento
|
||||
|
||||
import (
|
||||
"errors"
|
||||
)
|
||||
|
||||
type State struct {
|
||||
Description string
|
||||
}
|
||||
|
||||
type memento struct {
|
||||
state State
|
||||
}
|
||||
|
||||
type originator struct {
|
||||
state State
|
||||
}
|
||||
func (o *originator) StoreStateToMemento() memento {
|
||||
return memento{state: o.state}
|
||||
}
|
||||
func (o *originator) StoreStateFromMemento(m memento) {
|
||||
o.state = m.state
|
||||
}
|
||||
|
||||
type careTaker struct {
|
||||
mementos []memento
|
||||
}
|
||||
func (c *careTaker) Push(m memento) {
|
||||
c.mementos = append(c.mementos, m)
|
||||
|
||||
}
|
||||
func (c *careTaker) Get(i int) (memento, error) {
|
||||
var m memento
|
||||
if len(c.mementos) < i || i< 0 {
|
||||
return m, errors.New("Index is out of range")
|
||||
}
|
||||
|
||||
return c.mementos[i], nil
|
||||
}
|
Reference in New Issue
Block a user