日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

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

作者:Ch3n ? 更新時間: 2023-03-04 編程語言

組合模式

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

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

概念示例

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

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

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: 執行結果

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

原文鏈接:https://ch3nnn.blog.csdn.net/article/details/126966436

欄目分類
最近更新