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

Golang設(shè)計模式之組合模式講解

 更新時間:2023年01月14日 10:34:44   作者:Ch3n  
這篇文章主要介紹了Golang設(shè)計模式之組合模式,組合模式針對于特定場景,如文件管理、組織管理等,使用該模式能簡化管理,使代碼變得非常簡潔

組合模式

組合是一種結(jié)構(gòu)型設(shè)計模式, 你可以使用它將對象組合成樹狀結(jié)構(gòu), 并且能像使用獨立對象一樣使用它們。

對于絕大多數(shù)需要生成樹狀結(jié)構(gòu)的問題來說, 組合都是非常受歡迎的解決方案。 組合最主要的功能是在整個樹狀結(jié)構(gòu)上遞歸調(diào)用方法并對結(jié)果進行匯總。

概念示例

讓我們試著用一個操作系統(tǒng)文件系統(tǒng)的例子來理解組合模式。 文件系統(tǒng)中有兩種類型的對象: 文件和文件夾。 在某些情形中, 文件和文件夾應(yīng)被視為相同的對象。 這就是組合模式發(fā)揮作用的時候了。

想象一下, 你需要在文件系統(tǒng)中搜索特定的關(guān)鍵詞。 這一搜索操作需要同時作用于文件和文件夾上。 對于文件而言, 其只會查看文件的內(nèi)容; 對于文件夾則會在其內(nèi)部的所有文件中查找關(guān)鍵詞。

file.go: 組件接口

package main
import "fmt"
type File struct {
    name string
}
func (f *File) search(keyword string) {
    fmt.Printf("Searching for keyword %s in file %s\n", keyword, f.name)
}
func (f *File) getName() string {
    return f.name
}

folder.go: 組合

package main
import "fmt"
type Folder struct {
    components []Component
    name       string
}
func (f *Folder) search(keyword string) {
    fmt.Printf("Serching recursively for keyword %s in folder %s\n", keyword, f.name)
    for _, composite := range f.components {
        composite.search(keyword)
    }
}
func (f *Folder) add(c Component) {
    f.components = append(f.components, c)
}

component.go: 葉子

package main
type Component interface {
    search(string)
}

main.go: 客戶端代碼

package main
func main() {
    file1 := &File{name: "File1"}
    file2 := &File{name: "File2"}
    file3 := &File{name: "File3"}
    folder1 := &Folder{
        name: "Folder1",
    }
    folder1.add(file1)
    folder2 := &Folder{
        name: "Folder2",
    }
    folder2.add(file2)
    folder2.add(file3)
    folder2.add(folder1)
    folder2.search("rose")
}

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

Serching recursively for keyword rose in folder Folder2
Searching for keyword rose in file File2
Searching for keyword rose in file File3
Serching recursively for keyword rose in folder Folder1
Searching for keyword rose in file File1

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

相關(guān)文章

  • Go語言實現(xiàn)遺傳算法的實例代碼

    Go語言實現(xiàn)遺傳算法的實例代碼

    Go 是一個開源的編程語言,它能讓構(gòu)造簡單、可靠且高效的軟件變得容易。本文將重點介紹如何用Go語言實現(xiàn)遺傳算法。如果你還沒有參加過GoLang Tour,我還建議你快速看一下這門語言的介紹
    2017-11-11
  • golang之資源釋放/異常錯誤處理解析

    golang之資源釋放/異常錯誤處理解析

    這篇文章主要為大家介紹了golang之資源釋放/異常錯誤處理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Go并發(fā)同步Mutex典型易錯使用場景

    Go并發(fā)同步Mutex典型易錯使用場景

    這篇文章主要為大家介紹了Go并發(fā)同步Mutex典型易錯使用場景示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Go語言中獲取IP地址的方法小結(jié)

    Go語言中獲取IP地址的方法小結(jié)

    這篇文章主要為大家詳細介紹了Go語言中獲取IP地址的常用方法,文中的示例代碼講解詳細,具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • golang開發(fā)中channel使用

    golang開發(fā)中channel使用

    channel[通道]是golang的一種重要特性,正是因為channel的存在才使得golang不同于其它語言。這篇文章主要介紹了golang開發(fā)中channel使用,需要的朋友可以參考下
    2020-09-09
  • 詳解Golang實現(xiàn)請求限流的幾種辦法

    詳解Golang實現(xiàn)請求限流的幾種辦法

    這篇文章主要介紹了詳解Golang實現(xiàn)請求限流的幾種辦法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 詳解Go-JWT-RESTful身份認(rèn)證教程

    詳解Go-JWT-RESTful身份認(rèn)證教程

    這篇文章主要介紹了詳解Go-JWT-RESTful身份認(rèn)證教程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • go語言數(shù)組及結(jié)構(gòu)體繼承和初始化示例解析

    go語言數(shù)組及結(jié)構(gòu)體繼承和初始化示例解析

    這篇文章主要為大家介紹了go語言數(shù)組及結(jié)構(gòu)體繼承和初始化示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • Go基于struct?tag實現(xiàn)結(jié)構(gòu)體字段級別的訪問控制

    Go基于struct?tag實現(xiàn)結(jié)構(gòu)體字段級別的訪問控制

    本文將會基于這個主題展開,討論Go中的結(jié)構(gòu)體tag究竟是什么,我們該如何利用它,另外,文末還提供了一個實際案例,實現(xiàn)結(jié)構(gòu)體字段級別的訪問,幫助我們進一步提升對struct tag的理解
    2024-02-02
  • Go實現(xiàn)比較時間大小

    Go實現(xiàn)比較時間大小

    這篇文章主要介紹了Go實現(xiàn)比較時間大小的方法和示例,非常的簡單實用,有需要的小伙伴可以參考下。
    2015-04-04

最新評論