spring增强策略模式-原始

This commit is contained in:
fujiayang
2022-01-26 09:48:45 +08:00
parent e20286c47d
commit 9347b5f4e4
7 changed files with 231 additions and 0 deletions

View File

@@ -0,0 +1,97 @@
package top.fjy8018.designpattern.pattern.behavior.templatemethod.spring;
import top.fjy8018.designpattern.pattern.behavior.templatemethod.spring.bean.*;
import java.util.ArrayList;
import java.util.List;
/**
* 原始逻辑
*
* @author F嘉阳
* @date 2022/1/26 09:38
*/
public class FormItemConverter {
/**
* 将输入的配置转变为表单项
*
* @param config 前端输入的配置
* @return 表单项
*/
public FormItem convert(FormItemConfig config) {
FormItem formItem = new FormItem();
// 公共的表单项属性
formItem.setTitle(config.getTitle());
formItem.setCode(config.getCode());
formItem.setComponent(config.getComponent());
// 创建表单组件的属性
FormComponentProps props = new FormComponentProps();
formItem.setComponentProps(props);
// 公共的组件属性
if (config.isReadOnly()) {
props.setReadOnly(true);
}
ComponentTypeEnum type = config.getType();
// 下拉选择框的特殊属性处理
if (type == ComponentTypeEnum.DROPDOWN_SELECT) {
props.setAutoWidth(false);
if (config.isMultiple()) {
props.setMode("multiple");
}
}
// 模糊搜索框的特殊属性处理
if (type == ComponentTypeEnum.FUZZY_SEARCH) {
formItem.setFuzzySearch(true);
props.setAutoWidth(false);
}
// ... 其他组件的特殊处理
// 创建约束规则
List<FormItemRule> rules = new ArrayList<>(2);
formItem.setRules(rules);
// 每个表单项都可有的约束规则
if (config.isRequired()) {
FormItemRule requiredRule = new FormItemRule();
requiredRule.setRequired(true);
requiredRule.setMessage("请输入" + config.getTitle());
rules.add(requiredRule);
}
// 文本输入框才有的规则
if (type == ComponentTypeEnum.TEXT_INPUT || type == ComponentTypeEnum.TEXT_AREA) {
Integer minLength = config.getMinLength();
if (minLength != null && minLength > 0) {
FormItemRule minRule = new FormItemRule();
minRule.setMin(minLength);
minRule.setMessage("请至少输入 " + minLength + " 个字");
rules.add(minRule);
}
Integer maxLength = config.getMaxLength();
if (maxLength != null && maxLength > 0) {
FormItemRule maxRule = new FormItemRule();
maxRule.setMax(maxLength);
maxRule.setMessage("请最多输入 " + maxLength + " 个字");
rules.add(maxRule);
}
}
// ... 其他约束规则
return formItem;
}
}

View File

@@ -0,0 +1,19 @@
package top.fjy8018.designpattern.pattern.behavior.templatemethod.spring.bean;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* TODO:
*
* @author F嘉阳
* @date 2022/1/26 09:43
*/
@Getter
@AllArgsConstructor
public enum ComponentTypeEnum {
DROPDOWN_SELECT,
FUZZY_SEARCH,
TEXT_INPUT,
TEXT_AREA;
}

View File

@@ -0,0 +1,19 @@
package top.fjy8018.designpattern.pattern.behavior.templatemethod.spring.bean;
import lombok.Data;
/**
* TODO:
*
* @author F嘉阳
* @date 2022/1/26 09:40
*/
@Data
public class FormComponentProps {
private boolean readOnly;
private boolean autoWidth;
private String mode;
}

View File

@@ -0,0 +1,27 @@
package top.fjy8018.designpattern.pattern.behavior.templatemethod.spring.bean;
import lombok.Data;
import java.util.List;
/**
* TODO:
*
* @author F嘉阳
* @date 2022/1/26 09:39
*/
@Data
public class FormItem {
private String title;
private String code;
private String component;
private FormComponentProps componentProps;
private boolean fuzzySearch;
private List<FormItemRule> rules;
}

View File

@@ -0,0 +1,31 @@
package top.fjy8018.designpattern.pattern.behavior.templatemethod.spring.bean;
import lombok.Data;
/**
* TODO:
*
* @author F嘉阳
* @date 2022/1/26 09:39
*/
@Data
public class FormItemConfig {
private String title;
private String code;
private String component;
private boolean readOnly;
private ComponentTypeEnum type;
private boolean multiple;
private boolean required;
private Integer minLength;
private Integer maxLength;
}

View File

@@ -0,0 +1,21 @@
package top.fjy8018.designpattern.pattern.behavior.templatemethod.spring.bean;
import lombok.Data;
/**
* TODO:
*
* @author F嘉阳
* @date 2022/1/26 09:46
*/
@Data
public class FormItemRule {
private boolean required;
private String message;
private Integer min;
private Integer max;
}

View File

@@ -0,0 +1,17 @@
package top.fjy8018.designpattern.pattern.behavior.templatemethod.spring.bean;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* TODO:
*
* @author F嘉阳
* @date 2022/1/26 09:41
*/
@Getter
@AllArgsConstructor
public enum FormItemTypeEnum {
;
}