脚本宝典收集整理的这篇文章主要介绍了GoLang设计模式11 - 备忘录模式,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
备忘录模式是一种行为型设计模式。这种模式允许我们保存对象在某些关键节点时的必要信息,以便于在适当的时候可以将之恢复到之前的状态。通常它可以用来帮助设计撤销/恢复操作。
下面是备忘录设计模式的主要角色:
Originator有两个方法: savememento()
和 reStorememento()
。
下面是代码。
memento.go
originator.go
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 }
caretaker.go
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] }
注意在caretaker中包含了一个mementoArray对象来保存全部的备忘录信息。
main.go
import "fmt" func main() { caretaker := &caretaker{ mementoArray: make([]*memento, 0), } originator := &originator{ state: "A", } fmt.PRintf("Originator current State: %sn", originator.getState()) caretaker.addMemento(originator.createMemento()) originator.setState("B") fmt.Printf("Originator Current State: %sn", originator.getState()) caretaker.addMemento(originator.createMemento()) originator.setState("C") fmt.Printf("Originator Current State: %sn", originator.getState()) caretaker.addMemento(originator.createMemento()) originator.restoreMemento(caretaker.getMemento(1)) fmt.Printf("Restored to State: %sn", originator.getState()) originator.restoreMemento(caretaker.getMemento(0)) fmt.Printf("Restored to State: %sn", originator.getState()) }
执行结果为:
Originator Current State: A Originator Current State: B Originator Current State: C Restored to State: B Restored to State: A
代码已上传至GITHub: zhyea / go-patterns / memento-pattern 。
END!
以上是脚本宝典为你收集整理的GoLang设计模式11 - 备忘录模式全部内容,希望文章能够帮你解决GoLang设计模式11 - 备忘录模式所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。