功能点:数据校验接口
该接口用于校验产品中心的数据的正确性,根据数据类型校验,如果是数字类型的数据走数字类型的校验方法,如果是
checkbox
类型的数据走
checkbox
类型的数据校验方法。
模式讲解:
策略模式为了避免重复多重使用
if-else
语句,将每一个
if
块作为一种策略对象。
UML
键下图:
![](http://192.168.145.32:8272/bbs/data/attachment/forum/201706/21/213204wlfs5l777x79flxo.png)
策略模式包含四个角色:
(1) Strategy工厂,用于生产具体的Strategy
- public class StrategyFactory {
- private static StrategyFactory factory = newStrategyFactory();
- private static Map<String,Object> strategyMap = newConcurrentHashMap<>();
- private StrategyFactory(){
- }
-
- static{
- //文本框、密码
- strategyMap.put(ParamTypeEnum.TEXT.getName(), newTextCheckStrategy());
- //数字框
- strategyMap.put(ParamTypeEnum.NUMBER.getName(), newNumberCheckStrategy());
- //范围
- strategyMap.put(ParamTypeEnum.RANGE.getName(), newRangeCheckStrategy());
- //内联复选框
- strategyMap.put(ParamTypeEnum.CHECKBOX.getName(), newCheckBoxCheckStrategy());
-
- }
- public Strategycreator(String type){
- return (Strategy) strategyMap.get(type);
- }
- public staticStrategyFactory getInstance(){
- return factory;
- }
- }
(2) 抽象策略角色
- public interface Strategy {
-
- /**
- *数据校验
- *dbvalue:为数据库中的字段
- *paramValue:接口传递的参数
- *
- *@param dbvalue
- *@param paramValue
- *@return
- *@author YixinCapital -- shaoml
- * 2016年11月15日 下午6:01:15
- */
- public StringcheckData(Object paramValue, String dbValue);
- }
(3)具体策略角色,相当于if块
- public class NumberCheckStrategy implementsStrategy{}
- public class CheckBoxCheckStrategy implementsStrategy {}
客户端调用为:
- NumberCheckStrategynumberStrategy= (NumberCheckStrategy) StrategyFactory.getInstance().creator(itemType);
- ret = numberStrategy.checkData(paramValue, dbValue);
- CheckBoxCheckStrategycheckBoxStrategy= (CheckBoxCheckStrategy)StrategyFactory.getInstance().creator(itemType);
- ret = checkBoxStrategy.checkData(paramValue, dbValue);
优点:可以扩展任意类型的数据校验,例如添加radio,text等类型的数据校验。
缺点:1.客户端必须要知道所有的策略,2.策略很多的话会有很多策略对象