溫馨提示×

怎么用java狀態(tài)模式實現(xiàn)工作流

小億
125
2024-01-22 10:19:24
欄目: 編程語言

在Java中,可以使用狀態(tài)模式來實現(xiàn)工作流。狀態(tài)模式是一種行為設(shè)計模式,它允許對象在內(nèi)部狀態(tài)改變時改變它的行為。

首先,我們需要定義工作流的狀態(tài)。假設(shè)有三種狀態(tài):待辦、進(jìn)行中和已完成。

public interface WorkflowState {
    void handle(WorkflowContext context);
}

public class TodoState implements WorkflowState {
    @Override
    public void handle(WorkflowContext context) {
        System.out.println("當(dāng)前狀態(tài):待辦");
        // 處理待辦事項
        // 設(shè)置下一狀態(tài)
        context.setState(new InProgressState());
    }
}

public class InProgressState implements WorkflowState {
    @Override
    public void handle(WorkflowContext context) {
        System.out.println("當(dāng)前狀態(tài):進(jìn)行中");
        // 處理進(jìn)行中事項
        // 設(shè)置下一狀態(tài)
        context.setState(new CompletedState());
    }
}

public class CompletedState implements WorkflowState {
    @Override
    public void handle(WorkflowContext context) {
        System.out.println("當(dāng)前狀態(tài):已完成");
        // 處理已完成事項
        // 設(shè)置下一狀態(tài)
        context.setState(new TodoState());
    }
}

接下來,我們需要定義一個工作流上下文,用于保存當(dāng)前狀態(tài)和處理狀態(tài)的方法。

public class WorkflowContext {
    private WorkflowState state;
    
    public WorkflowContext() {
        this.state = new TodoState();
    }
    
    public void handle() {
        state.handle(this);
    }
    
    public WorkflowState getState() {
        return state;
    }
    
    public void setState(WorkflowState state) {
        this.state = state;
    }
}

最后,我們可以使用工作流上下文來處理工作流。

public class Main {
    public static void main(String[] args) {
        WorkflowContext context = new WorkflowContext();
        
        context.handle(); // 打?。寒?dāng)前狀態(tài):待辦
        context.handle(); // 打?。寒?dāng)前狀態(tài):進(jìn)行中
        context.handle(); // 打?。寒?dāng)前狀態(tài):已完成
        context.handle(); // 打?。寒?dāng)前狀態(tài):待辦
    }
}

這樣,我們就使用狀態(tài)模式實現(xiàn)了一個簡單的工作流。每次處理工作流時,工作流上下文會根據(jù)當(dāng)前狀態(tài)調(diào)用相應(yīng)的處理方法,并更新狀態(tài)到下一狀態(tài)。

0