diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/after/NumberPickerConverter.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/after/NumberPickerConverter.java
new file mode 100644
index 0000000..07d9e4b
--- /dev/null
+++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/after/NumberPickerConverter.java
@@ -0,0 +1,61 @@
+package top.fjy8018.designpattern.pattern.behavior.templatemethod.spring.after;
+
+import org.springframework.stereotype.Component;
+import top.fjy8018.designpattern.pattern.behavior.templatemethod.spring.bean.ComponentTypeEnum;
+import top.fjy8018.designpattern.pattern.behavior.templatemethod.spring.bean.FormItemConfig;
+import top.fjy8018.designpattern.pattern.behavior.templatemethod.spring.bean.FormItemRule;
+
+import java.util.List;
+
+/**
+ * 此时要加入一种新的表单项 —— 数字选择器(NUMBER_PICKER),
+ * 它有着特殊的约束条件:最小值和最大值,输入到 FormItemConfig 时分别为 minNumer 和 maxNumber
+ *
+ * 只需要添加对应的枚举和实现对应的 FormItemConverter,并不需要修改任何逻辑代码,
+ * 因为 Spring 启动时会自动帮我们处理好 NUMBER_PICKER 和 NumberPickerConverter 的关联关系 —— 完美符合 “开闭原则”
+ *
+ * @author F嘉阳
+ * @date 2022/1/26 10:13
+ */
+@Component
+public class NumberPickerConverter extends AbstractFormItemConverter {
+
+ /**
+ * 子类可处理的表单项类型
+ */
+ @Override
+ public ComponentTypeEnum getType() {
+ return ComponentTypeEnum.NUMBER_PICKER;
+ }
+
+ /**
+ * 约束规则创建完成之后,子类如果需要特殊处理,可覆写该方法
+ *
+ * @param rules
+ * @param config
+ */
+ @Override
+ protected void afterRulesCreate(List rules, FormItemConfig config) {
+ Integer minNumber = config.getMinNumber();
+ // 处理最小值
+ if (minNumber != null) {
+ FormItemRule minNumRule = new FormItemRule();
+
+ minNumRule.setMinimum(minNumber);
+ minNumRule.setMessage("输入数字不能小于 " + minNumber);
+
+ rules.add(minNumRule);
+ }
+
+ Integer maxNumber = config.getMaxNumber();
+ // 处理最大值
+ if (maxNumber != null) {
+ FormItemRule maxNumRule = new FormItemRule();
+
+ maxNumRule.setMaximum(maxNumber);
+ maxNumRule.setMessage("输入数字不能大于 " + maxNumber);
+
+ rules.add(maxNumRule);
+ }
+ }
+}
diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/ComponentTypeEnum.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/ComponentTypeEnum.java
index 6dcd923..93a8d1d 100644
--- a/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/ComponentTypeEnum.java
+++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/ComponentTypeEnum.java
@@ -15,5 +15,6 @@ public enum ComponentTypeEnum {
DROPDOWN_SELECT,
FUZZY_SEARCH,
TEXT_INPUT,
- TEXT_AREA;
+ TEXT_AREA,
+ NUMBER_PICKER;
}
diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItemConfig.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItemConfig.java
index 38ce904..8f0c086 100644
--- a/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItemConfig.java
+++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItemConfig.java
@@ -30,4 +30,8 @@ public class FormItemConfig {
private Integer maxLength;
private String placeholder;
+
+ private Integer minNumber;
+
+ private Integer maxNumber;
}
diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItemRule.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItemRule.java
index 76c24a8..4b0cc54 100644
--- a/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItemRule.java
+++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItemRule.java
@@ -18,4 +18,8 @@ public class FormItemRule {
private Integer min;
private Integer max;
+
+ private Integer minimum;
+
+ private Integer maximum;
}