组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。
简单的理解就是一颗树中有根节点也有叶子节点,对于它们的增删改查,我们都使用名字同样的函数,但是具体的行为却因为注册时不一样而不一样。
看下代码:
package composite
import "fmt"
type Component interface {
Parent() Component
SetParent( Component)
Name() string
SetName(string)
AddChild(component Component)
Print( string)
}
const (
LeafNode = iota
CompositeNode
)
//组合模式的简单工厂,可以看成根据参数决定创建目录,或者文件
//返回即可以描述目录又可以描述文件的interface
func NewComponent(kind int, name string) Component {
var c Component
switch kind {
case LeafNode:
c = NewLeaf()
case CompositeNode:
c = NewComposite()
}
c.SetName(name)
return c
}
//这个是共有部分,叶子和根节点都有这个,细节的不同可以重写相关方法函数
type component struct {
parent Component
name string
}
func (c *component) Parent() Component {
return c.parent
}
func (c *component) SetParent(parent Component) {
c.parent = parent
}
func (c *component