Golang設計模式之組合模式講解
組合模式
組合是一種結構型設計模式, 你可以使用它將對象組合成樹狀結構, 并且能像使用獨立對象一樣使用它們。
對于絕大多數(shù)需要生成樹狀結構的問題來說, 組合都是非常受歡迎的解決方案。 組合最主要的功能是在整個樹狀結構上遞歸調用方法并對結果進行匯總。
概念示例
讓我們試著用一個操作系統(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基于struct?tag實現(xiàn)結構體字段級別的訪問控制
本文將會基于這個主題展開,討論Go中的結構體tag究竟是什么,我們該如何利用它,另外,文末還提供了一個實際案例,實現(xiàn)結構體字段級別的訪問,幫助我們進一步提升對struct tag的理解2024-02-02