JAVA 策略模式+工厂模式

项目使用策略模式来处理不同类型的API配置,通过ApiConfigStrategy接口和具体的策略实现类来统一管理不同类型的API。

核心接口

  • ApiConfigStrategy: 定义了API配置的通用操作接口
    • add(): 添加API配置
    • edit(): 编辑API配置
    • info(): 获取API配置信息
    • supports(): 判断是否支持特定API类型
java 复制代码
public interface ApiConfigStrategy {

    void edit(ApiUpdateDTO apiEditDTO);

    void add(ApiCreateDTO apiCreateDTO);

    ApiConfig info(ApiConfig apiConfig);

    boolean supports(String apiType);
}

抽象基类

  • AbstractApiConfigStrategy: 提供了保存API基础配置的通用方法
java 复制代码
public abstract class AbstractApiConfigStrategy implements ApiConfigStrategy {

    @Resource
    private ApiConfigDao apiConfigDao;

    protected Long saveApiConfig(ApiCreateDTO apiCreateDTO) {
        ApiConfig apiConfig = apiConfigDao.save(ApiConfig.builder()
                .apiName(apiCreateDTO.getApiName())
                .requestTimeLimit(apiCreateDTO.getRequestTimeLimit())
                .timeOut(apiCreateDTO.getTimeOut())
                .status(ApiConfig.STATUS_ONLINE)
                .comment(apiCreateDTO.getComment())
                .createTime(new Date())
                .build());
        return apiConfig.getId();
    }
}

策略实现

1. ApiHttpStrategy - HTTP API

  • API类型: http
    • 功能: 处理HTTP接口类型的API配置
    • 关键字段:
    • url: HTTP请求地址
    • method: HTTP请求方法(GET/POST)
    • 校验: URL和方法不能为空,方法只能是GET或POST
java 复制代码
@Component
public class ApiHttpStrategy extends AbstractApiConfigStrategy {

    @Resource
    ApiHttpConfigDao apiHttpConfigDao;

    @Override
    public void edit(ApiUpdateDTO apiEditDTO) {
        dataCheckAdd(apiEditDTO);

      apiHttpConfigDao.save(ApiHttpConfig.builder()
                 .apiId(apiEditDTO.getId())
                 .url(apiEditDTO.getUrl())
                 .method(apiEditDTO.getMethod())
                 .build());
    }

    @Override
    public void add(ApiCreateDTO apiCreateDTO) {
        apiHttpConfigDao.save(ApiHttpConfig.builder().apiId(saveApiConfig(apiCreateDTO))
                .url(apiCreateDTO.getUrl())
                .method(apiCreateDTO.getMethod())
                .build());
    }

    @Override
    public ApiConfig info(ApiConfig apiConfig) {
        apiConfig.setApiHttpConfig(apiHttpConfigDao.findByApiId(apiConfig.getId()));
        return apiConfig;
    }

    @Override
    public boolean supports(String apiType) {
        return ApiConfig.API_TYPE_HTTP.equals(apiType);
    }

    private void dataCheckAdd(ApiUpdateDTO apiEditDTO) {
    
    }

}

2. ApiFeignStrategy - Feign API

  • API类型: feign
    • 功能: 处理Feign客户端类型的API配置
    • 关键字段:
    • serverName: 服务名称
    • urlPath: 服务路径
    • 校验: 服务名称和路径不能为空
java 复制代码
@Component
public class ApiFeignStrategy extends AbstractApiConfigStrategy {

    @Resource
    ApiFeignConfigDao apiFeignConfigDao;

    @Override
    public void edit(ApiUpdateDTO apiEditDTO) {
        dataCheckAdd(apiEditDTO);
        apiFeignConfigDao.save(ApiFeignConfig.builder()
                  .apiId(apiEditDTO.getId())
                  .serverName(apiEditDTO.getServerName())
                  .url(apiEditDTO.getUrlPath())
                  .build());
    
    }
    

    @Override
    public void add(ApiCreateDTO apiCreateDTO) {
        apiFeignConfigDao.save(ApiFeignConfig.builder().apiId(saveApiConfig(apiCreateDTO))
                .serverName(apiCreateDTO.getServerName())
                .url(apiCreateDTO.getUrlPath())
                .build());
    }

    @Override
    public ApiConfig info(ApiConfig apiConfig) {
        apiConfig.setApiFeignConfig(apiFeignConfigDao.findByApiId(apiConfig.getId()));
        return apiConfig;
    }

    @Override
    public boolean supports(String apiType) {
        return ApiConfig.API_TYPE_FEIGN.equals(apiType);
    }

    private void dataCheckAdd(ApiUpdateDTO apiEditDTO) {
 
    }

}

service调用

java 复制代码
@Service
public class ApiConfigServiceImpl implements ApiConfigService {

	  @Autowired
    ApiConfigStrategyFactory apiConfigStrategyFactory;


  public void edit(ApiUpdateDTO apiUpdateDTO) {
        try {
            ApiConfigStrategy apiConfigStrategy = apiConfigStrategyFactory.getStrategy(apiUpdateDTO.getApiType());
            apiConfigStrategy.edit(apiUpdateDTO);
        } catch (Exception e) {
            log.error("edit apiConfig error", e);
            throw new RuntimeException("edit apiConfig error");
        }
    }
}

设计优点

  1. 设计模式优点
  2. 可扩展性: 添加新的API类型只需实现ApiConfigStrategy接口
  3. 可维护性:每种API类型有独立的处理逻辑,互不影响
  4. 复用性: AbstractApiConfigStrategy提供了通用的API基础配置保存方法
  5. 类型安全: 通过supports()方法确保正确的策略被调用
相关推荐
CoderYanger2 小时前
A.每日一题:856. 括号的分数
java·程序人生·算法·leetcode·面试·职场和发展·学习方法
liangbo73 小时前
01-Java 集合框架全景:从 Collection 到 Map 一张关系网理清
java
xuxigifxfh3 小时前
HJ15 求int型正整数在内存中存储时1的个数
java·开发语言·华为机考
Wokoo73 小时前
自动化测试入门:核心场景、回归测试与 Web 自动化环境搭建
java·开发语言·测试工具
tachibana23 小时前
Golang 中数组和切片的区别?
开发语言·后端·golang·数组·切片
我是人✓3 小时前
Spring IOC注解全解析和Spring整合测试单元
java·后端·spring
智购科技无人售货机工厂店3 小时前
玻璃瓶饮料破损率突然上升,排查发现是取货口缓冲垫老化了~YH
java·开发语言·人工智能·python·eclipse
镜象科技3 小时前
中小学AI心理健康解决方案服务商怎么选?2026年选型参考
android·java·人工智能
枫叶丹43 小时前
语音 AI 怎样边听边答:实时对话系统的工作原理
开发语言·人工智能·chatgpt·开源·php·agent·codex
阿狗童鞋4 小时前
高并发系统设计实战指南
java·spring boot·spring cloud