Go设计模式之备忘录模式讲解和代码示例

 更新时间:2023年08月02日 08:18:26   作者:demo007x  
备忘录是一种行为设计模式, 允许生成对象状态的快照并在以后将其还原,本文就通过代码示例给大家讲讲Go备忘录模式,感兴趣的小伙伴跟着小编一起来看看吧

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("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: C
Restored to State: C
Restored to State: A

到此这篇关于Go设计模式之备忘录模式讲解和代码示例的文章就介绍到这了,更多相关Go备忘录模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言框架Beego项目搭建的方法步骤

    Go语言框架Beego项目搭建的方法步骤

    这篇文章主要介绍了Go语言框架Beego项目搭建的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • 浅谈JWT在GO中的使用方法及原理

    浅谈JWT在GO中的使用方法及原理

    JWT是一种基于 JSON 的开放标准,用于在网络应用间传递声明,JWT被设计为可安全地将用户身份验证和授权数据作为 JSON 对象在各个应用程序之间传递,本文将详细给大家介绍JWT原理及在Go中的用法,需要的朋友可以参考下
    2023-05-05
  • 深入理解golang的异常处理机制

    深入理解golang的异常处理机制

    Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,下面这篇文章主要给大家介绍了关于golang的异常处理机制,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07
  • golang函数的返回值实现

    golang函数的返回值实现

    本文主要介绍了golang函数的返回值实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 一文理解Go 中的可寻址和不可寻址

    一文理解Go 中的可寻址和不可寻址

    如果字典的元素不存在,则返回零值,而零值是不可变对象,如果能寻址问题就大了。而如果字典的元素存在,考虑到 Go 中 map 实现中元素的地址是变化的,这意味着寻址的结果也是无意义的。下面我们就围绕这个话题写一篇文章吧,需要的朋友可以参考一下
    2021-10-10
  • Golang Gob编码(gob包的使用详解)

    Golang Gob编码(gob包的使用详解)

    这篇文章主要介绍了Golang Gob编码(gob包的使用详解),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • Go 结构体序列化的实现

    Go 结构体序列化的实现

    本文主要介绍了Go 结构体序列化的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 一文搞懂Golang文件操作增删改查功能(基础篇)

    一文搞懂Golang文件操作增删改查功能(基础篇)

    这篇文章主要介绍了一文搞懂Golang文件操作增删改查功能(基础篇),Golang 可以认为是服务器开发语言发展的趋势之一,特别是在流媒体服务器开发中,已经占有一席之地,今天我们不聊特别深奥的机制和内容,就来聊一聊 Golang 对于文件的基本操作
    2021-04-04
  • Golang中http包的具体使用

    Golang中http包的具体使用

    Go语言内置的net/http包十分优秀,提供了http客户端和服务器的实现,本文主要介绍了Golang中http包的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • golang gorm更新日志执行SQL示例详解

    golang gorm更新日志执行SQL示例详解

    这篇文章主要为大家介绍了golang gorm更新日志执行SQL示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04

最新评论