java写3.某教育机构组织结构如下图所示: 在该教育机构的OA系统中可以给各级办公室下发公文,试采用组合模式设计该机构的组织结构,绘制相应的类图并编程模拟实现,在客户端代码中模拟下发公文。
时间: 2023-06-19 13:05:08 浏览: 561
oa.rar_OA.mdf_java 工作流_oa java_公文 流程_工作流
以下是该机构的组织结构类图设计:
![组织结构类图](https://img-blog.csdnimg.cn/20211011162118141.png)
其中,抽象组件类 `Office` 定义了 `sendDocument()` 方法,表示可以下发公文。具体组件类 `Department` 继承了抽象组件类,并实现了 `sendDocument()` 方法。叶子组件类 `OfficeRoom` 表示具体的办公室,不再包含其他组件。复合组件类 `OfficeComposite` 包含了多个子部门或办公室,并可以递归调用它们的 `sendDocument()` 方法。
下面是Java代码的实现:
```java
// 抽象组件类
public abstract class Office {
protected String name;
public Office(String name) {
this.name = name;
}
public abstract void sendDocument();
}
// 具体组件类
public class Department extends Office {
public Department(String name) {
super(name);
}
@Override
public void sendDocument() {
System.out.println("向 " + name + " 部门下发公文。");
}
}
// 叶子组件类
public class OfficeRoom extends Office {
public OfficeRoom(String name) {
super(name);
}
@Override
public void sendDocument() {
System.out.println("向 " + name + " 办公室下发公文。");
}
}
// 复合组件类
public class OfficeComposite extends Office {
private List<Office> offices = new ArrayList<Office>();
public OfficeComposite(String name) {
super(name);
}
public void add(Office office) {
offices.add(office);
}
public void remove(Office office) {
offices.remove(office);
}
@Override
public void sendDocument() {
for (Office office : offices) {
office.sendDocument();
}
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
// 创建部门和办公室对象
Office sales = new Department("销售部");
Office marketing = new Department("市场部");
Office finance = new Department("财务部");
OfficeRoom bossRoom = new OfficeRoom("总经理办公室");
OfficeRoom hrRoom = new OfficeRoom("人力资源部办公室");
// 创建复合组件对象并添加子部门或办公室
OfficeComposite headOffice = new OfficeComposite("总部");
headOffice.add(sales);
headOffice.add(marketing);
headOffice.add(finance);
headOffice.add(bossRoom);
headOffice.add(hrRoom);
// 向总部下发公文
headOffice.sendDocument();
}
}
```
运行结果如下:
```
向 销售部 部门下发公文。
向 市场部 部门下发公文。
向 财务部 部门下发公文。
向 总经理办公室 办公室下发公文。
向 人力资源部办公室 办公室下发公文。
```
阅读全文