设计模式——策略模式
在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,
;
}
---
欢迎小伙伴一起探讨,一起学习,一起成长
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现