handleSubmit(FormSubmitRequest request);
+}
diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/spring/FormSubmitHandlerFactory.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/spring/FormSubmitHandlerFactory.java
new file mode 100644
index 0000000..d287d2b
--- /dev/null
+++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/spring/FormSubmitHandlerFactory.java
@@ -0,0 +1,57 @@
+package top.fjy8018.designpattern.pattern.behavior.strategy.spring;
+
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 策略的简单工厂
+ * 让 FormSubmitHandlerFactory 实现 InitializingBean 接口,在 afterPropertiesSet
+ * 方法中,基于 Spring 容器将所有 FormSubmitHandler 自动注册到 FORM_SUBMIT_HANDLER_MAP,
+ * 从而 Spring 容器启动完成后, getHandler 方法可以直接通过 submitType
+ * 来获取对应的表单提交处理器
+ *
+ * Factory 只负责获取 Handler,Handler 只负责处理具体的提交,Service 只负责逻辑编排,
+ * 从而达到功能上的 “低耦合高内聚”。
+ *
+ * @author F嘉阳
+ * @date 2021-12-27 21:44
+ */
+@Component
+public class FormSubmitHandlerFactory implements InitializingBean, ApplicationContextAware {
+
+ private static final Map> FORM_SUBMIT_HANDLER_MAP = new HashMap<>(8);
+
+ private ApplicationContext appContext;
+
+ /**
+ * 根据提交类型获取对应的处理器
+ *
+ * @param submitType 提交类型
+ * @return 提交类型对应的处理器
+ */
+ public FormSubmitHandler getHandler(String submitType) {
+ return FORM_SUBMIT_HANDLER_MAP.get(submitType);
+ }
+
+ @Override
+ public void afterPropertiesSet() {
+ // 将 Spring 容器中所有的 FormSubmitHandler 注册到 FORM_SUBMIT_HANDLER_MAP
+ appContext.getBeansOfType(FormSubmitHandler.class)
+ .values()
+ .forEach(handler -> FORM_SUBMIT_HANDLER_MAP.put(handler.getSubmitType(), handler));
+
+ }
+
+ @Override
+ public void setApplicationContext(@NonNull ApplicationContext applicationContext) {
+ appContext = applicationContext;
+ }
+
+}
diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/spring/FormSubmitRequest.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/spring/FormSubmitRequest.java
new file mode 100644
index 0000000..d4c069f
--- /dev/null
+++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/strategy/spring/FormSubmitRequest.java
@@ -0,0 +1,39 @@
+package top.fjy8018.designpattern.pattern.behavior.strategy.spring;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+/**
+ * 表单提交的请求
+ * FormSubmitHandler 的 getSubmitType 方法用来获取表单的提交类型(即策略类
+ * 型),用于根据客户端传递的参数直接获取到对应的策略实现;客户端传递的相关参数都被
+ * 封装为 FormSubmitRequest,传递给 handleSubmit 进行处理。
+ *
+ * @author F嘉阳
+ * @date 2021-12-27 21:37
+ */
+@Getter
+@Setter
+public class FormSubmitRequest {
+
+ /**
+ * 提交类型
+ *
+ * @see FormSubmitHandler#getSubmitType()
+ */
+ private String submitType;
+
+ /**
+ * 用户 id
+ */
+ private Long userId;
+
+ /**
+ * 表单提交的值
+ */
+ private Map formInput;
+
+ // 其他属性
+}
diff --git a/src/test/java/top/fjy8018/designpattern/pattern/behavior/strategy/spring/FormSubmitHandlerTest.java b/src/test/java/top/fjy8018/designpattern/pattern/behavior/strategy/spring/FormSubmitHandlerTest.java
new file mode 100644
index 0000000..337ed21
--- /dev/null
+++ b/src/test/java/top/fjy8018/designpattern/pattern/behavior/strategy/spring/FormSubmitHandlerTest.java
@@ -0,0 +1,20 @@
+package top.fjy8018.designpattern.pattern.behavior.strategy.spring;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.Serializable;
+
+@Component
+class FormSubmitHandlerTest {
+
+ @Autowired
+ private FormSubmitHandlerFactory factory;
+
+ @Test
+ void getSubmitType() {
+ FormSubmitHandler handler = factory.getHandler("preview");
+ handler.handleSubmit(new FormSubmitRequest());
+ }
+}
\ No newline at end of file