项目中使用的设计模式之策略模式

功能点:数据校验接口
该接口用于校验产品中心的数据的正确性,根据数据类型校验,如果是数字类型的数据走数字类型的校验方法,如果是 checkbox 类型的数据走 checkbox 类型的数据校验方法。
模式讲解:
策略模式为了避免重复多重使用 if-else 语句,将每一个 if 块作为一种策略对象。 UML 键下图:
策略模式包含四个角色:
(1)   Strategy工厂,用于生产具体的Strategy
  1. public class StrategyFactory {
  2.     private static  StrategyFactory factory = newStrategyFactory();
  3.     private static Map<String,Object> strategyMap = newConcurrentHashMap<>();
  4.     private StrategyFactory(){
  5.     }
  6.    
  7.     static{
  8.           //文本框、密码
  9.           strategyMap.put(ParamTypeEnum.TEXT.getName(), newTextCheckStrategy());
  10.           //数字框
  11.           strategyMap.put(ParamTypeEnum.NUMBER.getName(), newNumberCheckStrategy());
  12.           //范围
  13.           strategyMap.put(ParamTypeEnum.RANGE.getName(), newRangeCheckStrategy());
  14.           //内联复选框
  15.           strategyMap.put(ParamTypeEnum.CHECKBOX.getName(), newCheckBoxCheckStrategy());
  16.          
  17.         }
  18.     public Strategycreator(String type){
  19.        return  (Strategy) strategyMap.get(type);
  20.     }
  21.     public staticStrategyFactory getInstance(){
  22.        return factory;
  23.     }
  24. }
复制代码

(2)   抽象策略角色
  1. public interface Strategy {
  2.    
  3.         /**
  4.          *数据校验
  5.          *dbvalue:为数据库中的字段
  6.          *paramValue:接口传递的参数
  7.          *
  8.          *@param dbvalue
  9.          *@param paramValue
  10.          *@return
  11.          *@author YixinCapital -- shaoml
  12.          *        2016年11月15日 下午6:01:15
  13.          */
  14.      public StringcheckData(Object paramValue, String dbValue);
  15. }
复制代码

(3)具体策略角色,相当于if块
  1. public class NumberCheckStrategy implementsStrategy{}
  2. public class CheckBoxCheckStrategy implementsStrategy {}
复制代码



客户端调用为:
  1. NumberCheckStrategynumberStrategy=  (NumberCheckStrategy) StrategyFactory.getInstance().creator(itemType);
  2. ret = numberStrategy.checkData(paramValue, dbValue);
  3. CheckBoxCheckStrategycheckBoxStrategy=  (CheckBoxCheckStrategy)StrategyFactory.getInstance().creator(itemType);
  4. ret = checkBoxStrategy.checkData(paramValue, dbValue);
复制代码

优点:可以扩展任意类型的数据校验,例如添加radio,text等类型的数据校验。
缺点:1.客户端必须要知道所有的策略,2.策略很多的话会有很多策略对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值