 
1.定义共同的方法和行为
- package com.ultiwill.strategy;
- public interface PayStrategy {
-     /**
-      * 共同的行为方法
-      * @return
-      */
-     String toPayHtml();
- }
2. 三种具体策略的实现  (阿里支付, 微信支付, 小米支付)
- package com.ultiwill.strategy.impl;
- import com.ultiwill.strategy.PayStrategy;
- /**
-  * @author chong.zuo
-  * @date 2020/9/24 15:21
-  */
- public class AliPayStrategy implements PayStrategy {
-     @Override
-     public String toPayHtml() {
-         return "调用阿里支付...AliPayStrategy";
-     }
- }
- package com.ultiwill.strategy.impl;
- import com.ultiwill.strategy.PayStrategy;
- /**
-  * @author chong.zuo
-  * @date 2020/9/24 15:29
-  */
- public class WeChatPayStrategy implements PayStrategy {
-     @Override
-     public String toPayHtml() {
-         return "调用微信支付...WeChatPayStrategy";
-     }
- }
- package com.ultiwill.strategy.impl;
- import com.ultiwill.strategy.PayStrategy;
- /**
-  * @author chong.zuo
-  * @date 2020/9/24 15:34
-  */
- public class XiaomiPayStrategy implements PayStrategy {
-     @Override
-     public String toPayHtml() {
-         return "调用小米支付...XiaomiPayStrategy";
-     }
- }
3. 枚举类定义映射地址
- package com.ultiwill.strategy.enums;
- import org.apache.commons.lang.StringUtils;
- /**
- * 枚举
- * @author chong.zuo
- * @date 2020/9/24 15:45
- */
- public enum PayEnumStrategy {
-     /**
-     * 阿里支付
-     */
-     ALI_PAY("1","com.ultiwill.strategy.impl.AliPayStrategy"),
-     /**
-     * 微信支付
-     */
-     WECHAT_PAY("2","com.ultiwill.strategy.impl.WeChatPayStrategy"),
-     /**
-     * 小米支付
-     */
-     XIAOMI_PAY("3","com.ultiwill.strategy.impl.XiaomiPayStrategy");
-     private String code;
-     private String className;
-     PayEnumStrategy() {
-     }
-     PayEnumStrategy(String code, String className) {
-         this.code = code;
-         this.className = className;
-     }
-     public static String getClassNameByCode(String code) {
-         String className = "";
-         if (StringUtils.isEmpty(code)) {
-             return className;
-         }
-         for (PayEnumStrategy e : PayEnumStrategy.values()) {
-             if (e.code.equalsIgnoreCase(code)) {
-                 className = e.className;
-                 break;
-             }
-         }
-         return className;
-     }
-     public String getCode() {
-         return code;
-     }
-     public String getClassName() {
-         return className;
-     }
- }
4.工厂类反射执行
- package com.ultiwill.strategy.factory;
- import com.ultiwill.strategy.PayStrategy;
- import com.ultiwill.strategy.enums.PayEnumStrategy;
- /**
-  * @author chong.zuo
-  * @date 2020/9/24 16:10
-  */
- public class StrategyFactory {
-     /**
-      * 使用策略工厂获取具体策略实现
-      * @param code
-      * @return
-      */
-     public static PayStrategy getPayStrategy(String code) {
-         try {
-             return (PayStrategy) Class.forName(PayEnumStrategy.getClassNameByCode(code)).newInstance();
-         } catch (InstantiationException e) {
-             e.printStackTrace();
-         } catch (IllegalAccessException e) {
-             e.printStackTrace();
-         } catch (ClassNotFoundException e) {
-             e.printStackTrace();
-         }
-         return null;
-     }
- }
使用
- /**
-  * 上下文
-  *
-  * @author chong.zuo
-  * @date 2020/9/24 15:41
-  */
- public class PayContextStrategy {
-     /**
-      * 获取具体的策略实现
-      *
-      * @param code
-      * @return
-      */
-     public static String toPayHtml(String code) {
-         if (StringUtils.isBlank(code)) {
-             return "code不能为空...";
-         }
-         PayStrategy payStrategy = StrategyFactory.getPayStrategy(code);
-         if (payStrategy == null) {
-             return "没有找到具体的策略...";
-         }
-         return payStrategy.toPayHtml();
-     }
- }