日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

设计模式--备忘录(Memento)模式

發(fā)布時間:2025/3/21 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式--备忘录(Memento)模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

模式定義

在不破壞封裝性的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài),這樣以后就可以將該對象恢復(fù)到原先保存的狀態(tài)

類圖

要點總結(jié)

  • 備忘錄(Memento)存儲原發(fā)器(Originator)對象的內(nèi)部狀態(tài),在需要時恢復(fù)原發(fā)器狀態(tài)
  • Memento模式的核心是信息隱藏,即Originator需要向外界隱藏信息,保持其封裝性,但同時又需要將狀態(tài)保持到外界(Memento)

Go語言代碼實現(xiàn)

工程目錄

memento.go

package Mementotype Memento struct {state int }func NewMemento(value int) *Memento{return &Memento{value} }type Number struct {value int }func NewNumber (value int) *Number{return &Number{value: value} }func (n * Number) Double(){n.value = 2 * n.value }func (n *Number) Half () {n.value /= 2 }func (n *Number) Value() int {return n.value }func (n *Number) CreateMemento() *Memento{return NewMemento(n.value) }func (n *Number) SetMemento(memento *Memento){n.value = memento.state }

memento_test.go

package Mementoimport ("fmt""testing" )func TestNumber_SetMemento(t *testing.T) {n := NewNumber(7)n.Double()n.Double()memento := n.CreateMemento() //記錄當前時刻的值n.Half()n.SetMemento(memento) //拿出當時記錄的值fmt.Println(n.value) }

總結(jié)

以上是生活随笔為你收集整理的设计模式--备忘录(Memento)模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。