图案复合

Composite模式是指结构设计模式;在国内被称为“Compositor”。
假设我们正在开发一个应用程序 –相册。用户可以创建文件夹、在其中添加照片以及执行其他操作。您肯定需要能够显示文件夹中的文件数量、所有文件和文件夹的总数。
显然需要使用树,但是如何以简单方便的接口实现树架构呢?复合模式来救援。

希拉在月鸭

接下来在目录中我们实现 dataCount() 方法 –通过遍历组件数组中的所有元素,将它们的所有 dataCount 相加。
一切准备就绪!
下面是 Go 中的示例:
package main

import "fmt"

type component interface {

dataCount() int

}

type file struct {

}

type directory struct {

c []component

}

func (f file) dataCount() int {

return 1

}

func (d directory) dataCount() int {

var outputDataCount int = 0

for _, v := range d.c {
outputDataCount += v.dataCount()
}

return outputDataCount

}

func (d *directory) addComponent(c component) {

d.c = append(d.c, c)

}

func main() {

var f file
var rd directory
rd.addComponent(f)
rd.addComponent(f)
rd.addComponent(f)
rd.addComponent(f)

fmt.Println(rd.dataCount())

var sd directory
sd.addComponent(f)

rd.addComponent(sd)
rd.addComponent(sd)
rd.addComponent(sd)

fmt.Println(sd.dataCount())
fmt.Println(rd.dataCount())

}

来源

https://refactoring.guru/ru/design-patterns/复合