策略实现+工厂 消除if-else

实际场景:根据支付方式不同进入相应的逻辑

使用if-else 方法

/**
 * @Author: xh
 * @Date: 2021/1/28 10:34
 */

public class TestPay {
     
    public static void main(String[] args) {
     
        String pay="alipay";
        if("alipay".equals(pay)){
     
            System.out.println("支付宝支付逻辑..");
        }else if("wechat".equals(pay)){
     
            System.out.println("微信支付逻辑");
        }
    }
}

策略实现+工厂

优点:实现支付方式的解耦 利于拓展

1.创建interface接口
2.实现类实现该接口
3.创建策略工程,将实现类加入其中(map)
4.完成调用

/**
 * @Author: xh
 * @Date: 2021/1/28 10:29
 */

public interface Pay {
     

    /**
     * 支付
     * @return 支付凭证
     */
    String pay();
}

/**
 * @Author: xh
 * @Date: 2021/1/28 10:30
 */

public class AlipayImpl implements Pay {
     
    @Override
    public String pay() {
     
        System.out.println("阿里支付凭证");
        return "阿里支付凭证";
    }
}
/**
 * @Author: xh
 * @Date: 2021/1/28 10:30
 */

public class WechatPayImpl implements Pay {
     
    @Override
    public String pay() {
     
        System.out.println("微信支付凭证");
        return "微信支付凭证";
    }
}
/**
 * @Author: xh
 * @Date: 2021/1/28 10:31
 */

public class PayFactory {
     
    /**
     * 将支付实现类存入map
     */
    private static final Map<String, Pay> map = new HashMap<>();

    static {
     
        map.put("alipay",new AlipayImpl());
        map.put("wechat",new WechatPayImpl());
    }

    public static Pay getPay(String payType) {
     
        return map.get(payType);
    }

}
/**
 * @Author: xh
 * @Date: 2021/1/28 10:34
 */

public class TestPay {
     
    public static void main(String[] args) {
     
        pay("alipay");
        pay("wechat");
    }

    private static void pay(String payType) {
     
        Pay pay = PayFactory.getPay(payType);
        pay.pay();
    }
}

结果:
策略实现+工厂 消除if-else_第1张图片

你可能感兴趣的:(总结,策略设计模式,解耦,设计模式,工厂方法模式)