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

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

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

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

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

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

概念示例

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

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())
	// 添加一個(gè)備忘錄
	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è)計(jì)模式之備忘錄模式講解和代碼示例的文章就介紹到這了,更多相關(guān)Go備忘錄模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語(yǔ)言框架Beego項(xiàng)目搭建的方法步驟

    Go語(yǔ)言框架Beego項(xiàng)目搭建的方法步驟

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Golang中http包的具體使用

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

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

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

最新評(píng)論