设计模式学习-使用go实现备忘录模式
2021-11-27 20:59
537 查看
备忘录模式
定义
备忘录( Memento ):在不破坏封装性的前提下,获取一个对象的内部状态,并在该对象之处保存该状态。这样以后就可将该对象恢复到原先保存的状态。
这个模式的意图很明确,主要是用来防丢失、撤销、恢复等。
优点
1、给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态;
2、实现了信息的封装,使得用户不需要关心状态的保存细节。
缺点
消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。
适用范围
1、需要保存/恢复数据的相关状态场景;
2、提供一个可回滚的操作。
代码实现
比如我们看视频,比如看了一半,退出观看,下次打开就还能回到观看的位置。
type Memento interface{} type Video struct { time int } type videoMemento struct { time int } func (v *Video) Watch(time int) { v.time += time } func (v *Video) Save() Memento { return &videoMemento{ time: v.time, } } func (v *Video) Load(m Memento) { gm := m.(*videoMemento) v.time = gm.time } func (v *Video) Status() string { return fmt.Sprintf("video watch time:%d", v.time) }
测试代码
func TestVideo_Watch(t *testing.T) { video := &Video{ time: 10, } t.Log(video.Status()) progress := video.Save() video.Watch(30) t.Log(video.Status()) video.Load(progress) t.Log(video.Status()) }
参考
【文中代码】https://github.com/boilingfrog/design-pattern-learning/tree/master/备忘录模式
【大话设计模式】https://book.douban.com/subject/2334288/
【极客时间】https://time.geekbang.org/column/intro/100039001
【设计模式】https://github.com/senghoo/golang-design-pattern
【备忘录模式】https://boilingfrog.github.io/2021/11/27/%E4%BD%BF%E7%94%A8go%E5%AE%9E%E7%8E%B0%E5%A4%87%E5%BF%98%E5%BD%95%E6%A8%A1%E5%BC%8F/
相关文章推荐
- 设计模式学习-使用go实现命令模式
- 设计模式学习-使用go实现适配器模式
- 设计模式学习-使用go实现状态模式
- 设计模式学习-使用go实现中介者模式
- 设计模式学习-使用go实现享元模式
- 设计模式学习-使用go实现单例模式
- 设计模式学习-使用go实现解释器模式
- 从今天开始学习iOS开发(iOS 7版)--实现一款App之使用设计模式
- 策略模式学习,使用go实现策略模式
- 设计模式学习(十四)————抽象工厂模式(使用Qt框架的反射技术——根据字符串动态创建类来实现)
- GoF设计模式学习之一:单例模式(Java实现)
- 设计模式应用之使用COMPOSITE模式实现流程(三)
- [翻译]案例学习:仅使用Redis+PHP设计实现一个简单的Twitter
- JSP设计模式基础:View Helper模式——学习如何使用View Helper模式使得Model数据适应表现层的需要(2)
- 《模式——工程化实现及扩展》(设计模式C# 版)《备忘录模式 Memento》——“自我检验" 参考答案
- 使用C++实现设计模式(连载): 第二回 Factory 工厂模式
- 设计模式学习笔记——备忘录模式
- 设计模式应用之使用COMPOSITE模式实现流程(二)
- HeadFirst 设计模式学习笔记22-- 备忘录(Memento)模式拾零
- 设计模式应用之使用COMPOSITE模式实现流程(四)