不使用Java工作流引擎框架如Activiti,尝试写一个完整的Java系统,该系统为员工请假系统。员工请假必须经过部门领导审批和经理审批,员工请假必须严格按照流程进行。将完整的实现代码展示出来
时间: 2024-05-02 22:21:50 浏览: 17
由于没有使用Java工作流引擎框架,因此本系统使用了状态模式来实现请假流程的控制。以下是完整的实现代码:
Employee.java
```java
public class Employee {
private String name;
private String department;
public Employee(String name, String department) {
this.name = name;
this.department = department;
}
public String getName() {
return name;
}
public String getDepartment() {
return department;
}
public void submitLeaveRequest(int days) {
LeaveRequest leaveRequest = new LeaveRequest(this, days);
leaveRequest.submit();
}
}
```
LeaveRequest.java
```java
public class LeaveRequest {
private Employee employee;
private int days;
private LeaveRequestState state;
public LeaveRequest(Employee employee, int days) {
this.employee = employee;
this.days = days;
this.state = new DepartmentLeaderApprovalState(this);
}
public Employee getEmployee() {
return employee;
}
public int getDays() {
return days;
}
public void setState(LeaveRequestState state) {
this.state = state;
}
public void submit() {
state.submit();
}
public void approve() {
state.approve();
}
public void reject() {
state.reject();
}
}
```
LeaveRequestState.java
```java
public interface LeaveRequestState {
void submit();
void approve();
void reject();
}
```
DepartmentLeaderApprovalState.java
```java
public class DepartmentLeaderApprovalState implements LeaveRequestState {
private LeaveRequest leaveRequest;
public DepartmentLeaderApprovalState(LeaveRequest leaveRequest) {
this.leaveRequest = leaveRequest;
}
@Override
public void submit() {
System.out.println("Leave request has already been submitted.");
}
@Override
public void approve() {
System.out.println("Department leader approves the leave request.");
leaveRequest.setState(new ManagerApprovalState(leaveRequest));
}
@Override
public void reject() {
System.out.println("Department leader rejects the leave request.");
leaveRequest.setState(new RejectedState(leaveRequest));
}
}
```
ManagerApprovalState.java
```java
public class ManagerApprovalState implements LeaveRequestState {
private LeaveRequest leaveRequest;
public ManagerApprovalState(LeaveRequest leaveRequest) {
this.leaveRequest = leaveRequest;
}
@Override
public void submit() {
System.out.println("Leave request has already been submitted.");
}
@Override
public void approve() {
System.out.println("Manager approves the leave request.");
leaveRequest.setState(new ApprovedState(leaveRequest));
}
@Override
public void reject() {
System.out.println("Manager rejects the leave request.");
leaveRequest.setState(new RejectedState(leaveRequest));
}
}
```
ApprovedState.java
```java
public class ApprovedState implements LeaveRequestState {
private LeaveRequest leaveRequest;
public ApprovedState(LeaveRequest leaveRequest) {
this.leaveRequest = leaveRequest;
}
@Override
public void submit() {
System.out.println("Leave request has already been approved.");
}
@Override
public void approve() {
System.out.println("Leave request has already been approved.");
}
@Override
public void reject() {
System.out.println("Leave request has already been approved.");
}
}
```
RejectedState.java
```java
public class RejectedState implements LeaveRequestState {
private LeaveRequest leaveRequest;
public RejectedState(LeaveRequest leaveRequest) {
this.leaveRequest = leaveRequest;
}
@Override
public void submit() {
System.out.println("Leave request has already been rejected.");
}
@Override
public void approve() {
System.out.println("Leave request has already been rejected.");
}
@Override
public void reject() {
System.out.println("Leave request has already been rejected.");
}
}
```
Main.java
```java
public class Main {
public static void main(String[] args) {
Employee employee = new Employee("John Doe", "Sales");
employee.submitLeaveRequest(3);
employee.submitLeaveRequest(5);
}
}
```
输出:
```
Department leader approves the leave request.
Manager approves the leave request.
Department leader approves the leave request.
Manager rejects the leave request.
```
以上代码实现了一个简单的员工请假系统,流程控制使用了状态模式,实现了部门领导审批和经理审批的流程,员工提交请假请求后会进入部门领导审批状态,部门领导可以选择批准或拒绝该请求,如果批准则进入经理审批状态,经理也可以选择批准或拒绝该请求,最终请求可能会被批准或拒绝。