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

Golang設計模式之組合模式講解

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

組合模式

組合是一種結構型設計模式, 你可以使用它將對象組合成樹狀結構, 并且能像使用獨立對象一樣使用它們。

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

概念示例

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

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

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í)行結果

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

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

相關文章

  • 一文深入探討Go語言中的if-else語句

    一文深入探討Go語言中的if-else語句

    在Go語言中,條件語句的使用方式相對簡潔明了,所以本文將探討一下如何在Go程序中有效地進行條件判斷和邏輯控制,感興趣的小伙伴可以了解下
    2023-08-08
  • 通過Golang實現(xiàn)無頭瀏覽器截圖

    通過Golang實現(xiàn)無頭瀏覽器截圖

    在Web開發(fā)中,有時需要對網頁進行截圖,以便進行頁面預覽、測試等操作,本文為大家整理了Golang實現(xiàn)無頭瀏覽器的截圖的方法,感興趣的可以了解一下
    2023-05-05
  • Go使用緩存加速外部資源訪問提高性能效率

    Go使用緩存加速外部資源訪問提高性能效率

    緩存是架構設計中的常用概念,本文基于Go實現(xiàn)了一個簡單的緩存組件,支持最基本的緩存操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • 淺談Golang中創(chuàng)建一個簡單的服務器的方法

    淺談Golang中創(chuàng)建一個簡單的服務器的方法

    這篇文章主要介紹了淺談Golang中創(chuàng)建一個簡單的服務器的方法,golang中的net/http包對網絡的支持非常好,這樣會讓我們比較容易的建立起一個相對簡單的服務器,有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Go語言操作MySql數據庫的詳細指南

    Go語言操作MySql數據庫的詳細指南

    數據的持久化是程序中必不可少的,所以編程語言中對數據庫的操作是非常重要的一塊,這篇文章主要給大家介紹了關于Go語言操作MySql數據庫的相關資料,需要的朋友可以參考下
    2023-10-10
  • go語言time.After()的作用

    go語言time.After()的作用

    time.After 是 Go 語言中的一個函數,用于返回一個定時器通道,該通道在指定時間后發(fā)送當前時間,這個功能常用于超時控制和延遲執(zhí)行,本文就來詳細的介紹一下,感興趣的可以了解學習
    2024-10-10
  • 基于Golang 高并發(fā)問題的解決方案

    基于Golang 高并發(fā)問題的解決方案

    這篇文章主要介紹了Golang 高并發(fā)問題的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Go函數的使用示例教程

    Go函數的使用示例教程

    這篇文章主要介紹了Go函數的使用示例,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • 在Go中實現(xiàn)和使用堆棧以及先進先出原則詳解

    在Go中實現(xiàn)和使用堆棧以及先進先出原則詳解

    Go是一種功能強大的編程語言,提供了豐富的數據結構和算法,堆棧是計算機科學中的基本數據結構之一,在本博文中,我們將探討如何在?Go?中實現(xiàn)和使用堆棧,以及堆棧如何遵循先進先出?(FIFO)?原則
    2023-10-10
  • Go?iota關鍵字與枚舉類型實現(xiàn)原理

    Go?iota關鍵字與枚舉類型實現(xiàn)原理

    這篇文章主要介紹了Go?iota關鍵字與枚舉類型實現(xiàn)原理,iota是go語言的常量計數器,只能在常量的表達式中使用,更多相關內容需要的小伙伴可以參考一下
    2022-07-07

最新評論

长子县| 安阳县| 宝清县| 丹阳市| 九龙县| 手游| 永丰县| 伊金霍洛旗| 珠海市| 瑞丽市| 荥阳市| 屯门区| 南投市| 望城县| 木里| 吉林市| 建阳市| 尤溪县| 克什克腾旗| 涞水县| 甘洛县| 厦门市| 陆良县| 丹寨县| 中牟县| 招远市| 大冶市| 淅川县| 远安县| 苍溪县| 平昌县| 宜春市| 苏州市| 邓州市| 鄂州市| 昭觉县| 玉环县| 镇雄县| 华蓥市| 桂林市| 贺兰县|