组合模式(Composite Design Pattern)

定义
将一组对象组织(Compose)成树形结构,以表示一种“部分 - 整
体”的层次结构。
应用场景
- 业务场景必须能够表示为树形结构
- 例如:文件系统、员工系统(组织有各种层级,员工属于某个组织下)
go源码实现
公司的人员组织就是一个典型的树状的结构,现在假设我们现在有部分,和员工,两种角色,一个部门下面可以存在子部门和员工,员工下面不能再包含其他节点。
我们现在要实现一个统计一个部门工资的功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| package composite
import ( "testing"
"github.com/stretchr/testify/assert" )
func TestCountSalary(t *testing.T) { root := &Department{ subDepartment: make([]HumanResouce, 0), }
e1 := &Employee{Salary: 10} e2 := &Employee{Salary: 15} subDepartment := &Department{ subDepartment: []HumanResouce{e1, e2}, } e3 := &Employee{Salary: 6} root.AddSubDepartment(subDepartment) root.AddSubDepartment(e3) assert.Equal(t, 31, root.CountSalary()) }
|