设计模式——策略模式

在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,
    ;
}
posted @   咖啡因的取悦  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示