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

Golang設(shè)計(jì)模式之原型模式詳細(xì)講解

 更新時(shí)間:2023年01月11日 11:47:22   作者:Ch3n  
如果一個(gè)類(lèi)的有非常多的屬性,層級(jí)還很深。每次構(gòu)造起來(lái),不管是直接構(gòu)造還是用建造者模式,都要對(duì)太多屬性進(jìn)行復(fù)制,那么有沒(méi)有一種好的方式讓我們創(chuàng)建太的時(shí)候使用體驗(yàn)更好一點(diǎn)呢? 今天的文章里就給大家介紹一種設(shè)計(jì)模式,來(lái)解決這個(gè)問(wèn)題

原型模式

原型是一種創(chuàng)建型設(shè)計(jì)模式, 使你能夠復(fù)制對(duì)象, 甚至是復(fù)雜對(duì)象, 而又無(wú)需使代碼依賴(lài)它們所屬的類(lèi)。

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

概念示例

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

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

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

inode.go: 原型接口

package main
type Inode interface {
    print(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 _, i := range f.children {
        i.print(indentation + indentation)
    }
}
func (f *Folder) clone() Inode {
    cloneFolder := &Folder{name: f.name + "_clone"}
    var tempChildren []Inode
    for _, i := range f.children {
        copy := i.clone()
        tempChildren = append(tempChildren, copy)
    }
    cloneFolder.children = tempChildren
    return cloneFolder
}

main.go: 客戶(hù)端代碼

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("\nPrinting hierarchy for Folder2")
    folder2.print("  ")
    cloneFolder := folder2.clone()
    fmt.Println("\nPrinting hierarchy for clone Folder")
    cloneFolder.print("  ")
}

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

Printing 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)于Golang設(shè)計(jì)模式之原型模式詳細(xì)講解的文章就介紹到這了,更多相關(guān)Go原型模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang實(shí)現(xiàn)讀取excel文件并轉(zhuǎn)換為JSON格式

    Golang實(shí)現(xiàn)讀取excel文件并轉(zhuǎn)換為JSON格式

    本文介紹了如何使用Golang讀取Excel文件并將其轉(zhuǎn)換為JSON格式,通過(guò)安裝excelize依賴(lài)和創(chuàng)建readExcelToJSON方法,可以實(shí)現(xiàn)這一功能,如果需要轉(zhuǎn)換數(shù)據(jù)類(lèi)型,可以修改相應(yīng)的代碼,需要的朋友可以參考下
    2025-03-03
  • golang解析網(wǎng)頁(yè)利器goquery的使用方法

    golang解析網(wǎng)頁(yè)利器goquery的使用方法

    這篇文章主要給大家介紹了關(guān)于golang解析網(wǎng)頁(yè)利器goquery的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考借鑒,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • golang defer執(zhí)行順序全面詳解

    golang defer執(zhí)行順序全面詳解

    這篇文章主要為大家介紹了golang defer執(zhí)行順序全面詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Go語(yǔ)言如何實(shí)現(xiàn)Benchmark函數(shù)

    Go語(yǔ)言如何實(shí)現(xiàn)Benchmark函數(shù)

    go想要在main函數(shù)中測(cè)試benchmark會(huì)麻煩一些,所以這篇文章主要為大家介紹了如何實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的且沒(méi)有開(kāi)銷(xiāo)的benchmark函數(shù),希望對(duì)大家有所幫助
    2024-12-12
  • go語(yǔ)言中的defer關(guān)鍵字

    go語(yǔ)言中的defer關(guān)鍵字

    這篇文章介紹了go語(yǔ)言中的defer關(guān)鍵字,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Golang中interface{}轉(zhuǎn)為數(shù)組的操作

    Golang中interface{}轉(zhuǎn)為數(shù)組的操作

    這篇文章主要介紹了Golang中interface{}轉(zhuǎn)為數(shù)組的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Go語(yǔ)言中關(guān)于set的實(shí)現(xiàn)思考分析

    Go語(yǔ)言中關(guān)于set的實(shí)現(xiàn)思考分析

    Go?開(kāi)發(fā)過(guò)程中有時(shí)我們需要集合(set)這種容器,但?Go?本身未內(nèi)置這種數(shù)據(jù)容器,故常常我們需要自己實(shí)現(xiàn),下面我們就來(lái)看看具體有哪些實(shí)現(xiàn)方法吧
    2024-01-01
  • Go語(yǔ)言Http?Server框架實(shí)現(xiàn)一個(gè)簡(jiǎn)單的httpServer

    Go語(yǔ)言Http?Server框架實(shí)現(xiàn)一個(gè)簡(jiǎn)單的httpServer

    這篇文章主要為大家介紹了Go語(yǔ)言Http?Server框架實(shí)現(xiàn)一個(gè)簡(jiǎn)單的httpServer抽象,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 淺談Go Slice 高級(jí)實(shí)踐

    淺談Go Slice 高級(jí)實(shí)踐

    這篇文章主要介紹了淺談Go Slice 高級(jí)實(shí)踐,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • go語(yǔ)言beego框架分頁(yè)器操作及接口頻率限制示例

    go語(yǔ)言beego框架分頁(yè)器操作及接口頻率限制示例

    這篇文章主要為大家介紹了go語(yǔ)言beego框架分頁(yè)器操作使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04

最新評(píng)論

信宜市| 阿拉尔市| 天峨县| 内乡县| 稻城县| 博乐市| 隆尧县| 辽阳市| 建平县| 股票| 鄂托克旗| 宝丰县| 南城县| 武穴市| 利辛县| 修水县| 闽清县| 奉化市| 扎赉特旗| 花莲县| 阜新市| 加查县| 万州区| 龙门县| 乌拉特中旗| 长宁县| 集安市| 筠连县| 密云县| 米易县| 土默特左旗| 宜良县| 乌兰浩特市| 富锦市| 砚山县| 调兵山市| 汉源县| 股票| 偏关县| 沂源县| 淳化县|