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()方法确保正确的策略被调用
相关推荐
小成202303202655 小时前
Linux高级02
linux·开发语言
camellias_5 小时前
【无标题】
java·tomcat
知行合一。。。5 小时前
Python--04--数据容器(总结)
开发语言·python
咸鱼2.06 小时前
【java入门到放弃】需要背诵
java·开发语言
ZK_H6 小时前
嵌入式c语言——关键字其6
c语言·开发语言·计算机网络·面试·职场和发展
A.A呐6 小时前
【C++第二十九章】IO流
开发语言·c++
椰猫子6 小时前
Java:异常(exception)
java·开发语言
lifewange6 小时前
pytest-类中测试方法、多文件批量执行
开发语言·python·pytest
cmpxr_6 小时前
【C】原码和补码以及环形坐标取模算法
c语言·开发语言·算法
2401_827499997 小时前
python项目实战09-AI智能伴侣(ai_partner_5-6)
开发语言·python