简单的流程编排java版本

package workengine;

public interface workUnit {

    default void preValidate(){}

    default  void doBusiness(){}

    default void aftervalidate(){}
}
package workengine;

import java.util.function.Function;

public interface Template {

    public  void execute();
}
package workengine;

import engine.WorkUnit;

import java.util.List;

public class TemplateImpl implements Template {

    private List workUnits;

    @Override
    public void execute() {
        for(WorkUnit workUnit:workUnits){
            workUnit.preValidate();
            workUnit.doBusiness();
            workUnit.aftervalidate();
        }
    }
}
package purchase;

import context.RuntimeContexHolder;
import context.RuntimeContext;
import model.Request;
import model.Response;
import workengine.Template;

public class Purchase {

    private Template template;

    public Response doPurchase(Request request){

        RuntimeContext runtimeContext=RuntimeContexHolder.currentRuntimeContext();
        runtimeContext.setRequest(request);
        template.execute();
        return runtimeContext.getResponse();
    }
}
package purchase;

import context.RuntimeContexHolder;
import context.RuntimeContext;

public class InitCarts {

    public void initCarts(){
        RuntimeContext runtimeContext= RuntimeContexHolder.currentRuntimeContext();

    }
}
package context;

import model.Request;
import model.Response;
import model.ToString;

public class RuntimeContext extends ToString {

    //各种业务对象
    private Request request;

    private Response response;


    public Request getRequest() {
        return request;
    }

    public void setRequest(Request request) {
        this.request = request;
    }

    public Response getResponse() {
        return response;
    }

    public void setResponse(Response response) {
        this.response = response;
    }
}
package context;

public class RuntimeContexHolder {
    private static final ThreadLocal CURRENT_RUNTIME_CONTEXT=new ThreadLocal<>();

    public static RuntimeContext currentRuntimeContext(){
        RuntimeContext runtimeContext=CURRENT_RUNTIME_CONTEXT.get();
        if(null==runtimeContext){
            setCurrentRuntimeContext(new RuntimeContext());
        }
        return CURRENT_RUNTIME_CONTEXT.get();
    }

    public static void setCurrentRuntimeContext(RuntimeContext runtimeContext){
        CURRENT_RUNTIME_CONTEXT.set(runtimeContext);
    }

    public static void clear(){
        CURRENT_RUNTIME_CONTEXT.set(null);
        CURRENT_RUNTIME_CONTEXT.remove();
    }
}

使用线程上下文进行传值,这种方法还是比较low的,可以考虑使用上一遍文章中的注解进行不同业务之间进行值的传递

你可能感兴趣的:(java)