结构型-组合模式

组合模式(Composite Design Pattern)

组合模式

定义

将一组对象组织(Compose)成树形结构,以表示一种“部分 - 整
体”的层次结构。

应用场景

  1. 业务场景必须能够表示为树形结构
  2. 例如:文件系统、员工系统(组织有各种层级,员工属于某个组织下)

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())
}