设计模式这样玩泰简单(Golang版)-备忘录模式

Posted hello_读书就是赚钱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式这样玩泰简单(Golang版)-备忘录模式相关的知识,希望对你有一定的参考价值。

场景

老板:对我们的现有记录做存档,后面可以恢复,设计一个代码的方案
你:好的,老板.那就是使用备忘录模式

方案

在这里插入图片描述
备忘录模式,指的是用一个备忘录对象来记录原始对象的内部状态信息.原始对象利用备忘录对象对自己的属性做一次存档,然后可以通过这个备忘录对象对自己的属性做回滚.备忘录对象没有任何的功能,只是充当一个数据记录的作用.当然有人会说我们也可以通过深拷贝一个原始对象来做存档,但这样的话可能会导致这个克隆对象被误用.把存档的功能单独抽离出来是最好的,我也可以在原始对象的内部维护这个备忘录对象,这样就不会暴露出去,还能做到随时回滚的效果.

实现

package main

import "fmt"

type Memento struct {
	State int32
}

type Originator struct {
	State int32
}

func (o *Originator) CreateMemento() *Memento {
	fmt.Println("创建备忘录")
	return &Memento{
		State: o.State,
	}
}

func (o *Originator) RestoreFromMemento(memento *Memento) {
	fmt.Println("回滚")
	o.State = memento.State
}

func main() {
	fmt.Println("老板:对我们的现有记录做存档,后面可以恢复")
	fmt.Println("你:好的老板")
	o := &Originator{State: 100}
	fmt.Printf("记录状态[%+v]\\n", o.State)
	m := o.CreateMemento()
	o.State -= 1
	fmt.Printf("发生变动,记录状态[%+v]\\n", o.State)
	o.RestoreFromMemento(m)
	fmt.Printf("记录状态[%+v]\\n", o.State)
}

以上是关于设计模式这样玩泰简单(Golang版)-备忘录模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式这样玩泰简单(Golang版)-外观模式

设计模式这样玩泰简单(Golang版)-策略模式

设计模式这样玩泰简单(Golang版)-命令模式

设计模式这样玩泰简单(Golang版)-命令模式

设计模式这样玩泰简单(Golang版)-装饰者模式

设计模式这样玩泰简单(Golang版)-状态模式