当前位置:   article > 正文

SPRING中策略模式使用的正确姿态_梵天的佑翊csdn

梵天的佑翊csdn

SPRING中策略模式使用的正确姿态

 

1.策略模式简介    

      策略模式:策略模式是一种可以代替大量代码if-else的利器,应用场景较多:比如 支付(微信支付,支付宝支付,银行开支付),整合电商平台解密(pdd解密,dj解密,淘宝解密),策略模式对外提供统一解决方案的入口,具体解决策略自己选择适配; 咱们经常听到的段子是某cto怒怼开发人员谁再写if-else扣工资1000,可见高层是多么痛恨if-else,所以策略模式在对降低项目的整理耦合度,减少项目的维护成本显得尤为重要。

 

2.策略模式的使用

     在上述简介中的场景咱们任取一个, 比如在物流项目中,整合各个电商平台然后进行订单收件人信息解密策略。

     (1)定义策略接口

  1. public interface IDecryptStrategyService {
  2. /**
  3. * 做解密操作
  4. *
  5. * @param order 订单数据
  6. */
  7. void doDecrypt(Order order);
  8. }

  (2)实现定义的策略的具体实现

  1. @Service
  2. public class PddDecryptStrategyService implements IDecryptStrategyService {
  3. /**
  4. * 做解密操作
  5. *
  6. * @param order 订单信息
  7. */
  8. public void doDecrypt(OrderInfo order) {
  9. doSomthing();
  10. }
  11. }
  1. @Service
  2. public class JdDecryptStrategyService implements IDecryptStrategyService {
  3. /**
  4. * 做解密操作
  5. *
  6. * @param order 订单信息
  7. */
  8. public void doDecrypt(OrderInfo order) {
  9. doSomthing(order);
  10. }
  11. }

(4)实现定义的策略选择器的实现

  1. @Service
  2. public class DecryptStrategySelector {
  3. @Autowired
  4. private Map<String, IDecryptStrategyService> decryptStrategyServiceMap;
  5. public void doDecrypt(OrderInfo order) {
  6. // 获取策略名称map
  7. Map<String, String> strategyMap = Enums.PlantDecryptStrategyEnum.getMap();
  8. // 获取策略名称
  9. String strategyName = strategyMap.get(order.getPlantCode);
  10. // 获取策略
  11. IDecryptStrategyService decryptStrategyService = decryptStrategyServiceMap.get(strategyName);
  12. // 执行策略
  13. decryptStrategyService.doDecrypt(order);
  14. }
  15. }
  16. public class Enums {
  17. public enum PlantDecryptStrategyEnum {
  18. PDD("PDD", "pddDecryptStrategyService");
  19. JD("JD", "jdDecryptStrategyService");
  20. private String code;
  21. private String strategyName;
  22. PlantDecryptStrategyEnum(String code, String strategyName) {
  23. this.setCode(code);
  24. this.setStrategyName(strategyName);
  25. }
  26. public String getCode() {
  27. return code;
  28. }
  29. public void setCode(String code) {
  30. this.code = code;
  31. }
  32. public String getStrategyName() {
  33. return strategyName;
  34. }
  35. public void setStrategyName(String strategyName) {
  36. this.strategyName = strategyName;
  37. }
  38. private static Map<String, String> map = new HashMap<>();
  39. static {
  40. map.put(PDD.code, PDD.strategyName);
  41. }
  42. public static Map<String, String> getMap() {
  43. return map;
  44. }
  45. }
  46. }

  以上是在spring中如何使用策略模式

  3.总结

   (1)以上的策略模式案例相对来说不并不复杂,主要的逻辑都是体现在关于不同平台的解密策略上。结构相对来说也⽐较简单,在实际的开发中这样的设计模式也是⾮常常⽤的。另外这样的设计与命令模式、适配器模式结构相似,但是思路是有差异的。

   (2)通过策略设计模式的使⽤可以把我们⽅法中的if语句优化掉,⼤量的if语句使⽤会让代码难以扩展,也不好维护,同时在后期遇到各种问题也很难维护。在使⽤这样的设计模式后可以很好的满⾜隔离性与和扩展性,对于不断新增的需求也⾮常⽅便承接。

   (3)策略模式 、 适配器模式 、 组合模式 等,在⼀些结构上是⽐较相似的,但是每⼀个模式是有⾃⼰的逻辑特点,在使⽤的过程中最佳的⽅式是经过较多的实践来吸取经验,为后续的研发设计提供更好的技术输出。
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/593398
推荐阅读
相关标签
  

闽ICP备14008679号