java策略模式的简单实现

这里记录下策略模式的实现

1 新建一个controller

@RestController
@Api("java策略模式Demo")
@RequestMapping(value = "/finalTest", produces = MediaType.APPLICATION_JSON_VALUE)
public class StrategyTestController {
    @Autowired
    TestHandlerService testHandler;

    @CostTime
    @ApiOperation(value = "")
    @GetMapping(value = "/strategy")
    public CommonResult<List<String>> beforeAuditTmFirstPayAmount(@RequestParam Integer type) {
        return CommonResult.success(testHandler.getDaoByType(type).test(type));
    }
}

2  创建一个实现类ITestService

@Service
public interface ITestService {

    public Integer getType();

    public String test(Integer type);
}

 

3 创建俩个类实现 ITestService(我称之为策略类)实现ITestService

@Service
public class TestOneService implements ITestService {

    @Override
    public Integer getType() {
        return TestEnum.ONE.getCode();
    }

    @Override
    public String test(Integer type) {
        return "这是第一个策略";
    }
}
@Service
public class TestTwoService implements ITestService {

    @Override
    public Integer getType() {
        return TestEnum.TWO.getCode();
    }

    @Override
    public String test(Integer type) {
        return "这是第二个策略";
    }
}

4 创建一个TestHandlerService(用处初始化策略map,个人说法)

@Service
public class TestHandlerService {

    private final Map<Integer, ITestService> map = new HashMap<>();

    // 此构造方法是初始化map的值
    public TestHandlerService(List<ITestService> daoList) {
        for (ITestService dao : daoList) {
            map.put(dao.getType(), dao);
        }
    }

    public ITestService getDaoByType(Integer type) {
        return map.get(type);
    }
}

5 补充下上面的枚举类

@Data
public enum SearchEnum {

    ONE(1, "策略一"),
   
    TWO(2, "策略二"),
    ;
    private final Integer code;
    private final String desc;
}

6 此时根据我们接口传来的type,会自动选择执行策略,下面是结果,自此结束!

posted @ 2022-04-11 16:04  24、  阅读(364)  评论(1)    收藏  举报