利用枚举实现策略模式消除if else

1、定义公共的接口


/**
 * @ClassName: StrategyModeService
 * @Version: 1.0
 */
public interface StrategyModeService {

    String strategyModeTest();
}

2、定义实现类

/**
 *  服务一
 * @ClassName: OneServiceImpl
 * @Version: 1.0
 */
@Service
public class OneServiceImpl implements StrategyModeService {
    @Override
    public String strategyModeTest() {
        return "one-service";
    }
}

/**
 *  服务二
 * @ClassName: TwoServiceImpl
 * @Version: 1.0
 */
@Service
public class TwoServiceImpl implements StrategyModeService {

    @Override
    public String strategyModeTest() {
        return "two-service";
    }
}

/**
 *  服务三
 * @ClassName: ThreeServiceImpl
 * @Version: 1.0
 */
@Service
public class ThreeServiceImpl implements StrategyModeService {

    @Override
    public String strategyModeTest() {
        return "three-service";
    }
}

3、定义枚举类

/**
 * @ClassName: ServiceTypeEnum
 * @Version: 1.0
 */
@Getter
@AllArgsConstructor
public enum ServiceTypeEnum {

    //
    ONE(1, new OneServiceImpl()),
    TWO(2, new TwoServiceImpl()),
    THREE(3, new ThreeServiceImpl());

    private Integer value;

    private StrategyModeService service;

    public static StrategyModeService findType(Integer value) {
        return Arrays.stream(values()).filter(type -> type.getValue().equals(value)).findFirst().orElse(null).getService();
    }
}

4、通过接口调用

/**
 * @ClassName: StrategyModeController
 * @Version: 1.0
 */
@RestController
@RequestMapping("/strategy/mode")
@Api(value = "策略模式测试", tags = "策略模式测试")
public class StrategyModeController {


    @GetMapping("/test")
    @ApiOperation("策略模式测试接口")
    public String strategyModeTest(int value) {
        return ServiceTypeEnum.findType(value).strategyModeTest();
    }
}

结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值