ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

结构型:六. 组合模式

2022-04-01 23:05:12  阅读:200  来源: 互联网

标签:name keyword 模式 add 组合 file folder string 结构型


组合模式是什么

组合模式:是一种结构型设计模式, 你可以使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们。

为什么用组合模式

如果你需要实现树状对象结构,可以使用组合模式。确保应用的核心模型能够以树状结构表示。 尝试将其分解为简单元素和容器。 记住,容器必须能够同时包含简单元素和其他容器。

组合模式怎么实现

这里是模拟搜索文件夹和文件,文件夹里面有文件夹和文件。组成一个树状的结构。

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")
}

优点

  1. 你可以利用多态和递归机制更方便地使用复杂树结构。
  2. 遵循开闭原则。 无需更改现有代码, 你就可以在应用中添加新元素, 使其成为对象树的一部分。

缺点

  1. 设计较复杂,客户端需要花更多时间理清类之间的层次关系。
  2. 不容易限制容器中的构件。

标签:name,keyword,模式,add,组合,file,folder,string,结构型
来源: https://www.cnblogs.com/ourongxin/p/16089557.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有