设计模式不分语言,是一种思维层面的体现,但是不能在不同语言中使用同一套实现(每种语言有不同的特性),比如go,本身是没有继承一说,但是通过结构体的组合来实现语义上的继承。而多态也是通过接口的方式来实现的。
下方的图来自于大佬博客,贴在这里方便查看!!!
设计原则 设计模式 结构型模式组合模式
组合模式将一组对象组织成树形结构,以表示一种“部分-整体”的层次结构。最好处理的业务能够用树形结构表示,比如公司层级。
// IOrganization 组织接口,都实现统计人数的功能
type IOrganization interface {
Count() int
}
// Employee 员工
type Employee struct {
Name string
}
// Count 人数统计
func (Employee) Count() int {
return 1
}
// Department 部门
type Department struct {
Name string
SubOrganizations []IOrganization
}
// Count 人数统计
func (d Department) Count() int {
c := 0
for _, org := range d.SubOrganizations {
c += org.Count()
}
return c
}
// AddSub 添加子节点
func (d *Department) AddSub(org IOrganization) {
d.SubOrganizations = append(d.SubOrganizations, org)
}
// NewOrganization 构建组织架构 demo
func NewOrganization() IOrganization {
root := &Department{Name: "root"}
for i := 0; i < 10; i++ {
root.AddSub(&Employee{})
root.AddSub(&Department{Name: "sub", SubOrganizations: []IOrganization{&Employee{}}})
}
return root
}