策略模式实现

定义处理接口
public interface CalculateHandler {
String getKey();
boolean prepare(CalculateChainDTO calculateChainDTO);

void calculate(CalculateChainDTO calculateChainDTO);

default void after(CalculateChainDTO calculateChainDTO) {

}

/**
* 清理
*
* @param calculateChainDTO
*/
default void clean(CalculateChainDTO calculateChainDTO){

}

}


选择计算接口
public class CalculateServiceImpl{
@PostConstruct
public void init() {
handlersMap = handlers.stream().collect(Collectors.toMap(CalculateHandler::getKey, Function.identity(), (v1, v2) -> v1));
}

public boolean doCalculate(CalculateChainDTO calculateChainDTO) {
Assert.isTrue(CollectionUtil.isNotEmpty(calculateChainDTO.getCalculateChainEnums()),()->new EcchServiceException(400,"执行内容不可为空"));
for (CalculateChainEnum value : calculateChainDTO.getCalculateChainEnums()) {
CalculateHandler calculateHandler = handlersMap.get(value.getDesc());
boolean prepareFlag = calculateHandler.prepare(calculateChainDTO);
if (!prepareFlag) {
continue;
}
calculateHandler.calculate(calculateChainDTO);
calculateHandler.after(calculateChainDTO);
}
return true;
}

}

实现计算接口
@Slf4j
@Service
public class CalculateIncomeTaxHandler implements CalculateHandler {
@Override
public String getKey() {
return CalculateChainEnum.INCOME_TAX.getDesc();
}

@Override
public boolean prepare(CalculateChainDTO calculateChainDTO) {
。。。。。。

}
@Override
@MethodCallStatistics
public void calculate(CalculateChainDTO calculateChainDTO) {
。。。
}

}




posted @ 2025-10-28 11:58  人在代码在  阅读(2)  评论(0)    收藏  举报