场景
老板:让你做一个组织架构的实现,怎么实现可扩展性最高?
你:好的老板,那就是使用组合模式
方案
组合模式,指的是就是用接口做抽象,在这个接口内部组合自己,形成一个树型结构.
像组织架构,课表,等等可以形成树状的实体,都可以用组合模式来做一个实现,这样我们可以不断的演化节点类型而对总体的节点不用修改,不断的扩展这棵树的体积而不用动旧代码
实现
see:https://github.com/jjtHappy/design-pattern-so-simple
package main
import "fmt"
type Composite struct {
Name string
Childes []*Composite
}
func (c *Composite) AddChildes(child *Composite) {
if c.Childes ==nil{
c.Childes=[]*Composite{}
}
c.Childes = append(c.Childes,child)
}
func main() {
fmt.Println("实现一个组织架构")
fmt.Println("好的老板")
p:=&Composite{
Name: "公司",
}
p.AddChildes(&Composite{
Name: "总办",
})
p.AddChildes(&Composite{
Name: "开发部",
Childes: []*Composite{
&Composite{
Name: "开发一部",
},
&Composite{
Name: "开发二部",
},
},
})
printComposite(p,1)
}
func printComposite(p *Composite,offset int) {
for i:=0;i<offset;i++{
fmt.Print("-")
}
fmt.Println(p.Name)
for _,c:=range p.Childes {
printComposite(c,offset+1)
}
}