java设计模式--策略(2)

前景 已静态工厂+策略 处理多重if判断

项目演示地址

先看最终调用代码

@RestController
public class DemoController {

    @PostMapping(value = "/strategy/factory/pay")
    public String pay(@RequestParam String payType) {

        StrategyFactory strategyFactory = StrategyFactory.getInstance();

        Pay pay = strategyFactory.get(payType);

        String call = pay.call();

        System.out.println(call);

        return pay.call();

    }
}

定义公用接口

public interface Pay {

    String call();

    String getType();
}

public class AliPay implements Pay {

    @Override
    public String call() {
        System.out.println("调用支付宝");
        return "ali";
    }

    @Override
    public String getType() {
        return PayConstant.ali_pay.name();
    }
}


public class UnionPay implements Pay {

    @Override
    public String call() {
        System.out.println("调用银联");
        return "union";
    }

    @Override
    public String getType() {
        return PayConstant.union_pay.name();
    }
}
public class WxPay implements Pay {

    @Override
    public String call() {
        System.out.println("调用微信");
        return "wx";
    }

    @Override
    public String getType() {
        return PayConstant.wx_pay.name();
    }
}

枚举常量

public enum PayConstant {

    ali_pay,
    wx_pay,
    union_pay;
}

定义工厂

public class StrategyFactory {

    private Map<String, Pay> map;

    public StrategyFactory() {

        List<Pay> pays = new ArrayList<>();
        pays.add(new AliPay());
        pays.add(new WxPay());
        pays.add(new UnionPay());

        map = pays.stream().collect(Collectors.toMap(Pay::getType,strategy-> strategy));
    }

    public static StrategyFactory getInstance() {
        return PayStrategyFactory.instance;
    }

    public Pay get(String type) {

        return map.get(type);
    }

    public static class PayStrategyFactory{

        public static StrategyFactory instance = new StrategyFactory();

    }
}

项目演示地址

效果图

  • 请求
    在这里插入图片描述
  • 控制台打印

在这里插入图片描述
下一篇采用集成spring容器+数据库方式实现

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值