diff --git a/src/main/java/com/thebeastshop/liteflow/core/FlowExecutor.java b/src/main/java/com/thebeastshop/liteflow/core/FlowExecutor.java
index e3723529a..60c42effc 100644
--- a/src/main/java/com/thebeastshop/liteflow/core/FlowExecutor.java
+++ b/src/main/java/com/thebeastshop/liteflow/core/FlowExecutor.java
@@ -25,6 +25,7 @@ import com.thebeastshop.liteflow.entity.config.ThenCondition;
import com.thebeastshop.liteflow.entity.config.WhenCondition;
import com.thebeastshop.liteflow.entity.data.DataBus;
import com.thebeastshop.liteflow.entity.data.DefaultSlot;
+import com.thebeastshop.liteflow.entity.data.AbsSlot;
import com.thebeastshop.liteflow.entity.data.Slot;
import com.thebeastshop.liteflow.exception.ChainNotFoundException;
import com.thebeastshop.liteflow.exception.ComponentNotAccessException;
diff --git a/src/main/java/com/thebeastshop/liteflow/entity/data/AbsSlot.java b/src/main/java/com/thebeastshop/liteflow/entity/data/AbsSlot.java
new file mode 100644
index 000000000..4ed0ff3ea
--- /dev/null
+++ b/src/main/java/com/thebeastshop/liteflow/entity/data/AbsSlot.java
@@ -0,0 +1,100 @@
+/**
+ *
Title: liteFlow
+ * Description: 轻量级的组件式流程框架
+ * Copyright: Copyright (c) 2017
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2017-8-3
+ * @version 1.0
+ */
+package com.thebeastshop.liteflow.entity.data;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("unchecked")
+public abstract class AbsSlot implements Slot{
+
+ private static final Logger LOG = LoggerFactory.getLogger(Slot.class);
+
+ private final String REQUEST = "request";
+
+ private final String RESPONSE = "response";
+
+ private final String COND_NODE_PREFIX = "cond_";
+
+ private final String NODE_INPUT_PREFIX = "input_";
+
+ private final String NODE_OUTPUT_PREFIX = "output_";
+
+ private List executeSteps = new ArrayList();
+
+ protected ConcurrentHashMap dataMap = new ConcurrentHashMap();
+
+ public T getInput(String nodeId){
+ return (T)dataMap.get(NODE_INPUT_PREFIX + nodeId);
+ }
+
+ public T getOutput(String nodeId){
+ return (T)dataMap.get(NODE_OUTPUT_PREFIX + nodeId);
+ }
+
+ public void setInput(String nodeId,T t){
+ dataMap.put(NODE_INPUT_PREFIX + nodeId, t);
+ }
+
+ public void setOutput(String nodeId,T t){
+ dataMap.put(NODE_OUTPUT_PREFIX + nodeId, t);
+ }
+
+ public T getRequestData(){
+ return (T)dataMap.get(REQUEST);
+ }
+
+ public void setRequestData(T t){
+ dataMap.put(REQUEST, t);
+ }
+
+ public T getResponseData(){
+ return (T)dataMap.get(RESPONSE);
+ }
+
+ public void setResponseData(T t){
+ dataMap.put(RESPONSE, t);
+ }
+
+ public T getData(String key){
+ return (T)dataMap.get(key);
+ }
+
+ public void setData(String key, T t){
+ dataMap.put(key, t);
+ }
+
+ public void setCondResult(String key, T t){
+ dataMap.put(COND_NODE_PREFIX + key, t);
+ }
+
+ public T getCondResult(String key){
+ return (T)dataMap.get(COND_NODE_PREFIX + key);
+ }
+
+ public void addStep(String nodeId){
+ this.executeSteps.add(nodeId);
+ }
+
+ public void printStep(){
+ StringBuffer str = new StringBuffer();
+ for(int i = 0; i < this.executeSteps.size(); i++){
+ str.append(executeSteps.get(i));
+ if(i < this.executeSteps.size()-1){
+ str.append("==>");
+ }
+ }
+ LOG.info(str.toString());
+ }
+}
diff --git a/src/main/java/com/thebeastshop/liteflow/entity/data/DefaultSlot.java b/src/main/java/com/thebeastshop/liteflow/entity/data/DefaultSlot.java
index 83c4c8e69..2d30e8a10 100644
--- a/src/main/java/com/thebeastshop/liteflow/entity/data/DefaultSlot.java
+++ b/src/main/java/com/thebeastshop/liteflow/entity/data/DefaultSlot.java
@@ -4,97 +4,11 @@
* Copyright: Copyright (c) 2017
* @author Bryan.Zhang
* @email weenyc31@163.com
- * @Date 2017-8-3
+ * @Date 2017-12-4
* @version 1.0
*/
package com.thebeastshop.liteflow.entity.data;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.ConcurrentHashMap;
+public class DefaultSlot extends AbsSlot {
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@SuppressWarnings("unchecked")
-public class DefaultSlot implements Slot{
-
- private static final Logger LOG = LoggerFactory.getLogger(Slot.class);
-
- private final String REQUEST = "request";
-
- private final String RESPONSE = "response";
-
- private final String COND_NODE_PREFIX = "cond_";
-
- private final String NODE_INPUT_PREFIX = "input_";
-
- private final String NODE_OUTPUT_PREFIX = "output_";
-
- private List executeSteps = new ArrayList();
-
- protected ConcurrentHashMap dataMap = new ConcurrentHashMap();
-
- public T getInput(String nodeId){
- return (T)dataMap.get(NODE_INPUT_PREFIX + nodeId);
- }
-
- public T getOutput(String nodeId){
- return (T)dataMap.get(NODE_OUTPUT_PREFIX + nodeId);
- }
-
- public void setInput(String nodeId,T t){
- dataMap.put(NODE_INPUT_PREFIX + nodeId, t);
- }
-
- public void setOutput(String nodeId,T t){
- dataMap.put(NODE_OUTPUT_PREFIX + nodeId, t);
- }
-
- public T getRequestData(){
- return (T)dataMap.get(REQUEST);
- }
-
- public void setRequestData(T t){
- dataMap.put(REQUEST, t);
- }
-
- public T getResponseData(){
- return (T)dataMap.get(RESPONSE);
- }
-
- public void setResponseData(T t){
- dataMap.put(RESPONSE, t);
- }
-
- public T getData(String key){
- return (T)dataMap.get(key);
- }
-
- public void setData(String key, T t){
- dataMap.put(key, t);
- }
-
- public void setCondResult(String key, T t){
- dataMap.put(COND_NODE_PREFIX + key, t);
- }
-
- public T getCondResult(String key){
- return (T)dataMap.get(COND_NODE_PREFIX + key);
- }
-
- public void addStep(String nodeId){
- this.executeSteps.add(nodeId);
- }
-
- public void printStep(){
- StringBuffer str = new StringBuffer();
- for(int i = 0; i < this.executeSteps.size(); i++){
- str.append(executeSteps.get(i));
- if(i < this.executeSteps.size()-1){
- str.append("==>");
- }
- }
- LOG.info(str.toString());
- }
}