枚举实现策略设计模式

枚举实现策略设计模式 - 图1

1.定义共同的方法和行为

  1. package com.ultiwill.strategy;
  2. public interface PayStrategy {
  3. /**
  4. * 共同的行为方法
  5. * @return
  6. */
  7. String toPayHtml();
  8. }

2. 三种具体策略的实现 (阿里支付, 微信支付, 小米支付)

  1. package com.ultiwill.strategy.impl;
  2. import com.ultiwill.strategy.PayStrategy;
  3. /**
  4. * @author chong.zuo
  5. * @date 2020/9/24 15:21
  6. */
  7. public class AliPayStrategy implements PayStrategy {
  8. @Override
  9. public String toPayHtml() {
  10. return "调用阿里支付...AliPayStrategy";
  11. }
  12. }
  1. package com.ultiwill.strategy.impl;
  2. import com.ultiwill.strategy.PayStrategy;
  3. /**
  4. * @author chong.zuo
  5. * @date 2020/9/24 15:29
  6. */
  7. public class WeChatPayStrategy implements PayStrategy {
  8. @Override
  9. public String toPayHtml() {
  10. return "调用微信支付...WeChatPayStrategy";
  11. }
  12. }
  1. package com.ultiwill.strategy.impl;
  2. import com.ultiwill.strategy.PayStrategy;
  3. /**
  4. * @author chong.zuo
  5. * @date 2020/9/24 15:34
  6. */
  7. public class XiaomiPayStrategy implements PayStrategy {
  8. @Override
  9. public String toPayHtml() {
  10. return "调用小米支付...XiaomiPayStrategy";
  11. }
  12. }

3. 枚举类定义映射地址

  1. package com.ultiwill.strategy.enums;
  2. import org.apache.commons.lang.StringUtils;
  3. /**
  4. * 枚举
  5. * @author chong.zuo
  6. * @date 2020/9/24 15:45
  7. */
  8. public enum PayEnumStrategy {
  9. /**
  10. * 阿里支付
  11. */
  12. ALI_PAY("1","com.ultiwill.strategy.impl.AliPayStrategy"),
  13. /**
  14. * 微信支付
  15. */
  16. WECHAT_PAY("2","com.ultiwill.strategy.impl.WeChatPayStrategy"),
  17. /**
  18. * 小米支付
  19. */
  20. XIAOMI_PAY("3","com.ultiwill.strategy.impl.XiaomiPayStrategy");
  21. private String code;
  22. private String className;
  23. PayEnumStrategy() {
  24. }
  25. PayEnumStrategy(String code, String className) {
  26. this.code = code;
  27. this.className = className;
  28. }
  29. public static String getClassNameByCode(String code) {
  30. String className = "";
  31. if (StringUtils.isEmpty(code)) {
  32. return className;
  33. }
  34. for (PayEnumStrategy e : PayEnumStrategy.values()) {
  35. if (e.code.equalsIgnoreCase(code)) {
  36. className = e.className;
  37. break;
  38. }
  39. }
  40. return className;
  41. }
  42. public String getCode() {
  43. return code;
  44. }
  45. public String getClassName() {
  46. return className;
  47. }
  48. }

4.工厂类反射执行

  1. package com.ultiwill.strategy.factory;
  2. import com.ultiwill.strategy.PayStrategy;
  3. import com.ultiwill.strategy.enums.PayEnumStrategy;
  4. /**
  5. * @author chong.zuo
  6. * @date 2020/9/24 16:10
  7. */
  8. public class StrategyFactory {
  9. /**
  10. * 使用策略工厂获取具体策略实现
  11. * @param code
  12. * @return
  13. */
  14. public static PayStrategy getPayStrategy(String code) {
  15. try {
  16. return (PayStrategy) Class.forName(PayEnumStrategy.getClassNameByCode(code)).newInstance();
  17. } catch (InstantiationException e) {
  18. e.printStackTrace();
  19. } catch (IllegalAccessException e) {
  20. e.printStackTrace();
  21. } catch (ClassNotFoundException e) {
  22. e.printStackTrace();
  23. }
  24. return null;
  25. }
  26. }

使用

  1. /**
  2. * 上下文
  3. *
  4. * @author chong.zuo
  5. * @date 2020/9/24 15:41
  6. */
  7. public class PayContextStrategy {
  8. /**
  9. * 获取具体的策略实现
  10. *
  11. * @param code
  12. * @return
  13. */
  14. public static String toPayHtml(String code) {
  15. if (StringUtils.isBlank(code)) {
  16. return "code不能为空...";
  17. }
  18. PayStrategy payStrategy = StrategyFactory.getPayStrategy(code);
  19. if (payStrategy == null) {
  20. return "没有找到具体的策略...";
  21. }
  22. return payStrategy.toPayHtml();
  23. }
  24. }

若有收获,就点个赞吧

0 人点赞

  • 书签
  • 添加书签 移除书签
  • 日志
    • Log4j - Logger.getLogger(Class) 参数作用
  • Validate Framework
  • API网关的设计与实现
  • gardle
  • java8
    • java8 Optional
  • 爬虫
    • Jsoup
    • HttpClient
  • 字节码编辑技术
    • Javassist
  • 代码片段
  • 01-DO、DTO、BO、AO、VO、POJO定义
  • Spring
    • mybatis缓存
    • AOP
  • JVM
    • 一、Java内存区域与内存溢出异常和检测
      • 1.1-Java内存区域深究
      • 1.2-java内存分配策略
      • 1.3-java逃逸分析
      • 1.4-JVM常见的分配参数
      • 1.5-JVM 命令行调优工具
      • 1.6-JVM图形化调优工具
    • 四、类加载器
      • 2.1、字节码深入研究
      • 2.2、JVM 异常表与异常处理原理
      • 2.3-JVM类加载机制
    • 五、JVM调优
    • 四、手写JVM
  • IO
    • 深度剖析
    • 文件准备知识
      • 1、一次性完全弄懂Java中的路径
      • 2、理解Java中字符流与字节流的区别
      • 3、JavaIO之:目录还是文件
    • Java IO
      • IO概述
      • 字节输出流
      • 序列化
  • 多线程与并发
    • 线程池核心参数
    • Synchronized锁不住Integer
    • Map和CurrentHashMap
      • HashMap源码
    • Thread类
      • 01-并发初识
      • 02- java多线程创建
      • 03-线程的生命周期
      • 04-线程优先级priority
      • 05-守护线程 Deamon
      • 06-线程方法sleep & yield
      • 07-线程方法join
      • 08-线程方法interrupt
    • AQS
      • AQS源码
    • 线程间的同步与通信
      • 线程间的同步与通信(2)——wait, notify, notifyAll
      • 线程间的同步与通信(1)——同步代码块Synchronized
      • java并发中CountDownLatch的使用
    • FutureTask源码分析
  • 设计模式
    • UML类图
      • UML类图
    • 设计原则
    • 创建型
      • 单例设计模式
      • 工厂模式
        • 什么时候使用工厂方法模式?而不是简单工厂
      • 建造者模式
        • 建造者模式
      • 原型设计模式
    • 结构型
      • 适配器模式Adapter Pattern
        • Mybatis日志-适配器模式
      • 桥接模式
        • 桥接模式 Bridge Pattern
        • 桥接模式-使用场景
      • 装饰者模式(Decorator Pattern)
        • 装饰器模式在JDK源码中的应用
        • 装饰器模式在源码中的应用
        • 装饰者模式与代理模式的区别
      • 代理模式(proxy Pattern)
        • 代理模式
        • 设计模式之代理模式的应用-日志
      • 组合设计模式
    • 行为型
      • 观察者模式(Observer Pattern)
        • Spring的监听器
      • 模板设计模式
        • 模板设计模式在Spring中的应用
      • 策略设计模式
        • 枚举实现策略设计模式
      • 责任链模式
      • 迭代器模式
        • 迭代器模式在JDK中应用
      • 访问者模式
    • 综合运用
    • 设计模式类型
  • java SE基础
    • 序列化与反序列化
      • Java序列化和反序列化为什么要实现Serializable接口
      • Java序列化 - 二进制格式详解
      • Redis - RedisTemplate及4种序列化方式深入解读
    • 枚举
      • Java枚举类优化
      • java 枚举
    • Java中的工具类究竟如何命名?
    • 在Java继承中,构造函数的分析
    • Jackson使用详解
    • ASM字节码编程 | 用字节码增强技术给所有方法加上TryCatch捕获异常并输出
    • 泛型
      • Java 泛型 T、Class<T> 与 Class<?> 的区别
      • 泛型案例:
      • java 泛型
    • java8
      • java lambda表达式
      • java Stream流
    • java 异常
    • java内省
    • java 对象拷贝之BeanCopier
暂无相关搜索结果!
    展开/收起文章目录

    深圳SEO优化公司合肥营销型网站建设价格济源网站seo优化公司呼和浩特百姓网标王哪家好菏泽网站搜索优化爱联品牌网站设计推荐榆林关键词按天收费报价银川seo优化哪家好三明英文网站建设推荐绍兴SEO按天收费报价荆门百度网站优化湘潭百度网站优化哪家好唐山百度爱采购张北SEO按效果付费价格木棉湾网站推广方案推荐长春关键词按天扣费推荐凉山外贸网站建设价格阜阳百搜标王报价沙井推广网站公司深圳百度seo推荐坪山网站优化按天收费漯河百度竞价推荐三明关键词按天收费多少钱大同建网站公司玉溪关键词排名哪家好上海高端网站设计临沂seo网站优化坪山SEO按天收费报价白银百度seo报价青岛SEO按天收费多少钱鞍山seo网站推广价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

    深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化