设计模式——策略模式
在Spring下的策略模式
定义一个注解类Module
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Module {
/**
* 属于哪个模块
*/
String module();
}
定义一个业务接口
public interface ModuleService {
}
定义两个业务接口的实现类,并且类上添加@Module注解
@Module(module = "product")
@Service
public class ProductModuleServiceImpl implements ModuleService {
}
@Module(module = "sparePart")
@Service
public class SparePartModuleServiceImpl implements ModuleService {
}
定义一个策略工具类,因为类的创建都交给Spring管理,所以策略工具类也需要交给Spring管理
@Component
public class StrategyService {
@Autowired
private List<ModuleService> moduleServiceList;
public ModuleService getServiceByModule(String module) {
if (StringUtils.isBlank(module) || CollectionUtils.isEmpty(moduleServiceList)) {
return null;
}
// 遍历集合,根据Module注解的值来获取Service
ModuleService service = moduleServiceList
.stream()
.filter(moduleService -> moduleService.getClass().getAnnotation(Module.class).equals(module))
.findFirst()
.orElse(null);
return service;
}
}
也可以用枚举类来代替字符串写法,这样只需要维护这一个枚举类就可以了
public enum ModuleEnum {
PRODUCT,
SPARE_PART,
;
}
---
欢迎小伙伴一起探讨,一起学习,一起成长

浙公网安备 33010602011771号