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