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,会自动选择执行策略,下面是结果,自此结束!


浙公网安备 33010602011771号