implemented memento pattern
This commit is contained in:
parent
7cda9422a1
commit
c6e0b16804
@ -98,5 +98,8 @@ Define an object that encapsulates how a set of objects interact.Mediator promot
|
||||
### Template
|
||||
Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template method lets subclasses redefine certain steps of an algorithm without changing the algorithm structure.
|
||||
|
||||
### Memento
|
||||
Without violating encapsulation, capture and externalize an object's internal state so that the object can be restored to this state later.
|
||||
|
||||
## Concurrency patterns
|
||||
Pattenrs for concurrent work and parallel execution in Go.
|
||||
|
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