組合模式是什么
組合模式:是一種結構型設計模式, 你可以使用它將物件組合成樹狀結構, 并且能像使用獨立物件一樣使用它們,
為什么用組合模式
如果你需要實作樹狀物件結構,可以使用組合模式,確保應用的核心模型能夠以樹狀結構表示, 嘗試將其分解為簡單元素和容器, 記住,容器必須能夠同時包含簡單元素和其他容器,
組合模式怎么實作
這里是模擬搜索檔案夾和檔案,檔案夾里面有檔案夾和檔案,組成一個樹狀的結構,
folder.go
package composite
import "fmt"
type component interface {
search(string)
}
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)
}
file.go
package composite
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)
}
main.go 客戶端代碼
func main() {
file1 := &file{name: "File1"}
file2 := &file{name: "File2"}
file3 := &file{name: "File3"}
folder1 := &folder{
name: "Folder1",
}
folder2 := &folder{
name: "Folder2",
}
folder1.add(file1)
folder2.add(file2)
folder2.add(file3)
folder2.add(folder1)
folder2.search("rose")
}
優點
- 你可以利用多型和遞回機制更方便地使用復雜樹結構,
- 遵循開閉原則, 無需更改現有代碼, 你就可以在應用中添加新元素, 使其成為物件樹的一部分,
缺點
- 設計較復雜,客戶端需要花更多時間理清類之間的層次關系,
- 不容易限制容器中的構件,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/454672.html
標籤:設計模式
上一篇:redis隨筆
下一篇:redis隨筆
