假如总公司包括分公司、人力资源部HRD、财务部FD,分公司也有自己的人力资源部、财务部。请用组合模式模拟它们之间的关系,请完成类图设计及对应的Java实现代码。
时间: 2024-10-14 09:06:06 浏览: 8
组合模式是一种结构型设计模式,它允许你将对象组合成树形结构,使得用户对单个元素和组合元素的访问都保持一致。在这个场景中,我们可以设计一个高层的`Company`类代表总公司,它持有若干个`Branch`(分公司)对象,每个分公司又有自己的`HRD`和`FD`。下面是一个简单的类图和Java实现:
1. 类图设计:
- `Company`: 总公司,包含多个`Branch`。
- `Branch`: 分公司,有自己的`HRD`和`FD`。
- `HRD`: 人力资源部门。
- `FD`: 财务部门。
```plaintext
+---------+
| Company |
+---------+
| - branches: List<Branch> |
+---------+
+---------+
| Branch |
+---------+
| - hr: HRD |
| - fd: FD |
+---------+
+---------+
| HRD |
+---------+
| - name: String |
+---------+
+---------+
| FD |
+---------+
| - name: String |
+---------+
```
以下是对应的Java代码实现:
```java
import java.util.ArrayList;
import java.util.List;
// 父公司抽象类
abstract class BusinessUnit {
protected String name;
// 获取名称
public String getName() {
return name;
}
}
// 具体分支类,继承BusinessUnit
class Branch extends BusinessUnit {
private HRD hr;
private FD fd;
public Branch(String name) {
this.name = name;
hr = new HRD(name + " HRD");
fd = new FD(name + " FD");
}
public HRD getHR() {
return hr;
}
public FD getFD() {
return fd;
}
}
// 人力资源部门类
class HRD extends BusinessUnit {
public HRD(String name) {
super(name);
}
}
// 财务部门类
class FD extends BusinessUnit {
public FD(String name) {
super(name);
}
}
// 总公司类,使用组合模式管理分支
class Company {
private List<Branch> branches = new ArrayList<>();
public void addBranch(Branch branch) {
branches.add(branch);
}
public void showDepartmentNames() {
for (Branch branch : branches) {
System.out.println("分公司:" + branch.getName());
System.out.println("\tHRD:" + branch.getHR().getName());
System.out.println("\tFD:" + branch.getFD().getName());
System.out.println("--------------------");
}
}
}
public class Main {
public static void main(String[] args) {
Company company = new Company();
Branch branch1 = new Branch("北京");
Branch branch2 = new Branch("上海");
company.addBranch(branch1);
company.addBranch(branch2);
company.showDepartmentNames();
}
}
```
在这个例子中,`Company`通过`addBranch`方法添加`Branch`对象,`showDepartmentNames`方法展示了所有分支及其内部部门的信息。
阅读全文