欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go設(shè)計模式之備忘錄模式講解和代碼示例

 更新時間:2023年08月02日 08:18:26   作者:demo007x  
備忘錄是一種行為設(shè)計模式, 允許生成對象狀態(tài)的快照并在以后將其還原,本文就通過代碼示例給大家講講Go備忘錄模式,感興趣的小伙伴跟著小編一起來看看吧

Go 備忘錄模式講解和代碼示例

備忘錄是一種行為設(shè)計模式, 允許生成對象狀態(tài)的快照并在以后將其還原。

備忘錄不會影響它所處理的對象的內(nèi)部結(jié)構(gòu), 也不會影響快照中保存的數(shù)據(jù)。

概念示例

備忘錄模式讓我們可以保存對象狀態(tài)的快照。 你可使用這些快照來將對象恢復(fù)到之前的狀態(tài)。 這在需要在對象上實現(xiàn)撤銷-重做操作時非常實用。

originator.go: 原發(fā)器

package main
type Originator struct {
	state string
}
// 創(chuàng)建快照
func (e *Originator) createMemento() *Memento {
	return &Memento{state: e.state}
}
// 回復(fù)快照
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: 負(fù)責(zé)人

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: 執(zhí)行結(jié)果

Originator Current State: A
Originator Current State: C
Restored to State: C
Restored to State: A

到此這篇關(guān)于Go設(shè)計模式之備忘錄模式講解和代碼示例的文章就介紹到這了,更多相關(guān)Go備忘錄模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語言框架Beego項目搭建的方法步驟

    Go語言框架Beego項目搭建的方法步驟

    這篇文章主要介紹了Go語言框架Beego項目搭建的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 淺談JWT在GO中的使用方法及原理

    淺談JWT在GO中的使用方法及原理

    JWT是一種基于?JSON?的開放標(biāo)準(zhǔn),用于在網(wǎng)絡(luò)應(yīng)用間傳遞聲明,JWT被設(shè)計為可安全地將用戶身份驗證和授權(quán)數(shù)據(jù)作為?JSON?對象在各個應(yīng)用程序之間傳遞,本文將詳細(xì)給大家介紹JWT原理及在Go中的用法,需要的朋友可以參考下
    2023-05-05
  • 深入理解golang的異常處理機(jī)制

    深入理解golang的異常處理機(jī)制

    Go語言追求簡潔優(yōu)雅,所以,Go語言不支持傳統(tǒng)的 try…catch…finally 這種異常,下面這篇文章主要給大家介紹了關(guān)于golang的異常處理機(jī)制,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • golang函數(shù)的返回值實現(xiàn)

    golang函數(shù)的返回值實現(xiàn)

    本文主要介紹了golang函數(shù)的返回值實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 一文理解Go 中的可尋址和不可尋址

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

    如果字典的元素不存在,則返回零值,而零值是不可變對象,如果能尋址問題就大了。而如果字典的元素存在,考慮到 Go 中 map 實現(xiàn)中元素的地址是變化的,這意味著尋址的結(jié)果也是無意義的。下面我們就圍繞這個話題寫一篇文章吧,需要的朋友可以參考一下
    2021-10-10
  • Golang Gob編碼(gob包的使用詳解)

    Golang Gob編碼(gob包的使用詳解)

    這篇文章主要介紹了Golang Gob編碼(gob包的使用詳解),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Go?結(jié)構(gòu)體序列化的實現(xiàn)

    Go?結(jié)構(gòu)體序列化的實現(xiàn)

    本文主要介紹了Go?結(jié)構(gòu)體序列化的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 一文搞懂Golang文件操作增刪改查功能(基礎(chǔ)篇)

    一文搞懂Golang文件操作增刪改查功能(基礎(chǔ)篇)

    這篇文章主要介紹了一文搞懂Golang文件操作增刪改查功能(基礎(chǔ)篇),Golang 可以認(rèn)為是服務(wù)器開發(fā)語言發(fā)展的趨勢之一,特別是在流媒體服務(wù)器開發(fā)中,已經(jīng)占有一席之地,今天我們不聊特別深奧的機(jī)制和內(nèi)容,就來聊一聊 Golang 對于文件的基本操作
    2021-04-04
  • Golang中http包的具體使用

    Golang中http包的具體使用

    Go語言內(nèi)置的net/http包十分優(yōu)秀,提供了http客戶端和服務(wù)器的實現(xiàn),本文主要介紹了Golang中http包的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • golang?gorm更新日志執(zhí)行SQL示例詳解

    golang?gorm更新日志執(zhí)行SQL示例詳解

    這篇文章主要為大家介紹了golang?gorm更新日志執(zhí)行SQL示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04

最新評論