最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go設(shè)計(jì)模式之原型模式講解和代碼示例

 更新時(shí)間:2023年07月19日 08:32:14   作者:demo007x  
原型是一種創(chuàng)建型設(shè)計(jì)模式,使你能夠復(fù)制對(duì)象,甚至是復(fù)雜對(duì)象,而又無需使代碼依賴它們所屬的類,本文將通過代碼示例示例給大家講解一下Go 原型模式,感興趣的小伙伴可以參考閱讀

Go 原型模式講解和代碼示例

所有的原型類都必須有一個(gè)通用的接口, 使得即使在對(duì)象所屬的具體類未知的情況下也能復(fù)制對(duì)象。 原型對(duì)象可以生成自身的完整副本, 因?yàn)橄嗤惖膶?duì)象可以相互訪問對(duì)方的私有成員變量。

概念示例

讓我們嘗試通過基于操作系統(tǒng)文件系統(tǒng)的示例來理解原型模式。 操作系統(tǒng)的文件系統(tǒng)是遞歸的: 文件夾中包含文件和文件夾, 其中又包含文件和文件夾, 以此類推。

每個(gè)文件和文件夾都可用一個(gè) inode接口來表示。 inode接口中同樣也有 clone克隆功能。

file文件和 folder文件夾結(jié)構(gòu)體都實(shí)現(xiàn)了 print打印和 clone方法, 因?yàn)樗鼈兌际?inode類型。 同時(shí), 注意 filefolder中的 clone方法。 這兩者的 clone方法都會(huì)返回相應(yīng)文件或文件夾的副本。 同時(shí)在克隆過程中, 我們會(huì)在其名稱后面添加 “_clone” 字樣。

inode.go: 原型接口

package main
type Inode interface {
	printer(string)
	clone() Inode
}

file.go: 具體原型

package main
import "fmt"
type File struct {
	name string
}
func (f *File) print(indentation string) {
	fmt.Println(indentation + f.name)
}
func (f *File) clone() Inode {
	return &File{name: f.name + "_clone"}
}

folder.go: 具體原型

package main
import "fmt"
type Folder struct {
	children []Inode
	name     string
}
func (f *Folder) print(indentation string) {
	fmt.Println(indentation + f.name)
	for _, v := range f.children {
		v.print(indentation + indentation)
	}
}
func (f *Folder) clone() Inode {
	cloneFolder := &Folder{name: f.name + "_clone"}
	var tempChildren []Inode
	for _, v := range f.children {
		copy := v.clone()
		tempChildren = append(tempChildren, copy)
	}
	cloneFolder.children = tempChildren
	return cloneFolder
}

main.go: 客戶端代碼

package main
import "fmt"
func main() {
	file1 := &File{name: "file1"}
	file2 := &File{name: "file2"}
	file3 := &File{name: "file3"}
	folder1 := &Folder{
		children: []Inode{file1},
		name:     "folder1",
	}
	folder2 := &Folder{
		children: []Inode{folder1, file2, file3},
		name:     "folder2",
	}
	fmt.Println("Print hierarchy for folder2")
	folder2.print(" ")
	cloneFolder := folder2.clone()
	fmt.Println("\nPrinting hierarchy for clone Folder")
	cloneFolder.print("  ")
}

output.txt: 執(zhí)行結(jié)果

Print hierarchy for folder2
 folder2
  folder1
    file1
  file2
  file3

Printing hierarchy for clone Folder
  folder2_clone
    folder1_clone
        file1_clone
    file2_clone
    file3_clone

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

相關(guān)文章

  • golang使用泛型結(jié)構(gòu)體實(shí)現(xiàn)封裝切片

    golang使用泛型結(jié)構(gòu)體實(shí)現(xiàn)封裝切片

    這篇文章主要為大家詳細(xì)介紹了golang使用泛型結(jié)構(gòu)體實(shí)現(xiàn)封裝切片,即封裝切片的增、刪、改、查、長度大小、ForEach(遍歷切片),感興趣的小伙伴可以學(xué)習(xí)一下
    2023-10-10
  • golang讀取文件的常用方法總結(jié)

    golang讀取文件的常用方法總結(jié)

    今天小編就為大家分享一篇關(guān)于golang讀取文件的常用方法總結(jié),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • 使用?pprof?進(jìn)行性能分析的方法詳解

    使用?pprof?進(jìn)行性能分析的方法詳解

    pprof?是?Go?語言中用于性能分析的一個(gè)強(qiáng)大工具,它可以幫助開發(fā)人員找到應(yīng)用程序中的性能瓶頸,并提供詳細(xì)的分析報(bào)告,本文將介紹如何使用?pprof?進(jìn)行性能分析,需要的朋友可以參考下
    2023-05-05
  • Go語言sync.Pool對(duì)象池使用場(chǎng)景基本示例

    Go語言sync.Pool對(duì)象池使用場(chǎng)景基本示例

    這篇文章主要為大家介紹了Go語言sync.Pool對(duì)象池使用場(chǎng)景的基本示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Go每日一庫之zap日志庫的安裝使用指南

    Go每日一庫之zap日志庫的安裝使用指南

    這篇文章主要為大家介紹了Go每日一庫之zap安裝使用示例學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • goland中導(dǎo)包報(bào)紅和go mod問題

    goland中導(dǎo)包報(bào)紅和go mod問題

    這篇文章主要介紹了goland中導(dǎo)包報(bào)紅和go mod問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 詳解Golang如何監(jiān)聽某個(gè)函數(shù)的開始執(zhí)行和執(zhí)行結(jié)束

    詳解Golang如何監(jiān)聽某個(gè)函數(shù)的開始執(zhí)行和執(zhí)行結(jié)束

    這篇文章主要為大家詳細(xì)介紹了Golang如何監(jiān)聽某個(gè)函數(shù)的開始執(zhí)行和執(zhí)行結(jié)束,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下
    2024-02-02
  • GO語言zap日志庫理解和使用方法示例

    GO語言zap日志庫理解和使用方法示例

    Zap是一個(gè)高性能、結(jié)構(gòu)化日志庫,專為Go語言設(shè)計(jì),它由Uber開源,并且在Go社區(qū)中非常受歡迎,這篇文章主要介紹了GO語言zap日志庫理解和使用方法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-11-11
  • Go語言在Linux環(huán)境下輸出彩色字符的方法

    Go語言在Linux環(huán)境下輸出彩色字符的方法

    這篇文章主要介紹了Go語言在Linux環(huán)境下輸出彩色字符的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • goland Duration 和time的區(qū)別說明

    goland Duration 和time的區(qū)別說明

    這篇文章主要介紹了goland Duration 和time的區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12

最新評(píng)論

蓬溪县| 沾益县| 崇礼县| 宽城| 福贡县| 城口县| 昌江| 寿阳县| 乐业县| 观塘区| 安康市| 双柏县| 台前县| 霍城县| 高密市| 镇远县| 潮州市| 威宁| 阜城县| 泰顺县| 灵台县| 汉中市| 榆社县| 朔州市| 承德市| 平乡县| 利津县| 天峻县| 武宣县| 肥城市| 济宁市| 平江县| 临夏县| 桐庐县| 锡林浩特市| 平潭县| 二手房| 仙桃市| 重庆市| 黔西县| 炉霍县|