public class Test {
public static void main(String[] args) {
CurrentStatus currentStatus = new CurrentStatus();
currentStatus.setStatus(CurrentStatus.TO_BE_REVIEWED);
currentStatus.create();
currentStatus.examine();
currentStatus.pass();
currentStatus.reject();
}
}
// 抽象状态类
abstract class AbstractStatus {
// 当前环境状态
CurrentStatus currentStatus;
public void setCurrentStatus(CurrentStatus currentStatus) {
this.currentStatus = currentStatus;
}
// 创建
abstract void create();
// 审核
abstract void examine();
// 通过
abstract void pass();
// 驳回
abstract void reject();
}
// 具体状态类 待审核
class ToBeReviewed extends AbstractStatus {
@Override
void create() {
System.out.println("创建申请单,当前为待审核状态");
}
@Override
void examine() {
System.out.println("进行审核,转换为审核中状态");
super.currentStatus.setStatus(CurrentStatus.UNDER_REVIEW);
}
@Override
void pass() {
}
@Override
void reject() {
}
}
// 具体状态类 审核中
class UnderReview extends AbstractStatus {
@Override
void create() {
}
@Override
void examine() {
System.out.println("当前已经是审核中状态");
}
@Override
void pass() {
System.out.println("审核通过,转为审核通过状态");
super.currentStatus.setStatus(CurrentStatus.APPROVED);
}
@Override
void reject() {
System.out.println("转为驳回状态");
super.currentStatus.setStatus(CurrentStatus.REJECTED);
}
}
// 具体状态类 审核通过
class Approved extends AbstractStatus {
@Override
void create() {
}
@Override
void examine() {
}
@Override
void pass() {
}
@Override
void reject() {
System.out.println("转为驳回状态");
super.currentStatus.setStatus(CurrentStatus.REJECTED);
}
}
// 具体状态类 驳回
class Rejected extends AbstractStatus {
@Override
void create() {
System.out.println("驳回,转待审核状态");
super.currentStatus.setStatus(CurrentStatus.TO_BE_REVIEWED);
}
@Override
void examine() {
}
@Override
void pass() {
}
@Override
void reject() {
}
}
// 环境状态类
class CurrentStatus extends AbstractStatus {
// 不同环境的状态类
protected static final ToBeReviewed TO_BE_REVIEWED = new ToBeReviewed();
protected static final UnderReview UNDER_REVIEW = new UnderReview();
protected static final Approved APPROVED = new Approved();
protected static final Rejected REJECTED = new Rejected();
// 当前环境状态变量
private AbstractStatus status;
public void setStatus(AbstractStatus status) {
this.status = status;
// 当前环境状态
this.status.setCurrentStatus(this);
}
@Override
void create() {
status.create();
}
@Override
void examine() {
status.examine();
}
@Override
void pass() {
status.pass();
}
@Override
void reject() {
status.reject();
}
}