所有分类
  • 所有分类
  • 未分类

策略模式Java实战-写法2:注入接口

简介

说明

本文介绍Java中策略模式的写法:注入接口。

注入接口的具体方法是:接口+不同的实现类(作为Bean注册到Spring),注入接口来获取所有的实现类(是以Map的形式注入的,key为bean的名字,value为接口),然后通过key来获取对应的实现类的接口。

此写法的​优缺点

优点

  1. 实现类是通过SpringBoot注入的,新增实现类时无需手动添加到策略集合。
  2. 较为简洁。

此写法的缺点

  1. 通过@Component的value来区分类型
    1. 只支持字符串,无法支持枚举。
    2. 需要很小心地维护实现类的value,防止重名。
  2. 实现类不显式持有类型,无法获得本类型的信息(比如:描述),只能手动指定。

实战

思路

  1. 提供一个支付功能接口类,不同的支付方式去实现这个抽象类。
  2. 实现类的@Component注解的value对应不同的类型。
  3. 通过注入这个接口类来获取实现类的集合(Map形式),key为实现类的@Component的value字段的值,通过它获取具体实现类,去调用支付的方法。

代码结构

代码

此内容仅限VIP查看,请先

测试

代码

package com.knife.example.controller;

import com.knife.example.pay.PayType;
import com.knife.example.pay.PayStrategyHolder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
public class PayController {
    @Autowired
    private PayStrategyHolder payStrategyHolder;

    @GetMapping("/pay")
    public String pay(PayType payType) {
        payStrategyHolder.pay(payType);
        return "test success";
    }
}

测试

访问:http://localhost:8080/pay?payType=WECHAT_PAY

后端结果

输出如下内容:

调用远程接口:微信支付

1

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录