不要在代码里面写多个if else了
1、工厂注册类
package com.cpmc.cpmcwms.finance.fatory;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ObjectUtil;
import com.cpmc.cpmcwms.finance.service.MeasureUnitAbstract;
import lombok.experimental.UtilityClass;
import java.util.HashMap;
import java.util.Map;
/**
* @author wuzhenyong
* ClassName:MeasureUnitFactory.java
* date:2022-03-08 13:45
* Description: 工厂模式
*/
@UtilityClass
public class MeasureUnitFactory {
public final static Map<String, MeasureUnitAbstract> MEASURE_UNIT_ABSTRACT_MAP = new HashMap<>();
/**
* 获得计量单位服务
*
* @param unit 单位
* @return {@link MeasureUnitAbstract}
*/
public MeasureUnitAbstract getMeasureUnitService(String unit) {
return MEASURE_UNIT_ABSTRACT_MAP.get(unit);
}
/**
* 计量单位注册服务
*
* @param unit 单位
* @param measureUnitAbstract 注册服务
*/
public void registerMeasureUnitService(String unit, MeasureUnitAbstract measureUnitAbstract) {
if (CharSequenceUtil.isBlank(unit) || ObjectUtil.isEmpty(measureUnitAbstract)) {
return;
}
MEASURE_UNIT_ABSTRACT_MAP.put(unit, measureUnitAbstract);
}
}
2、工厂抽象类
package com.cpmc.cpmcwms.finance.service;
import com.cpmc.cpmcwms.finance.dto.CostCalculateDTO;
import org.springframework.beans.factory.InitializingBean;
/**
* @author wuzhenyong
* ClassName:MeasureUnitAbstract.java
* date:2022-03-08 13:40
* Description:
*/
public abstract class MeasureUnitAbstract implements InitializingBean {
// 方法自定义
public void calculateCost(CostCalculateDTO dto) {
}
}
3、抽象子类
package com.cpmc.cpmcwms.finance.service.impl;
import com.cpmc.cpmcwms.finance.constant.FinanceConstant;
import com.cpmc.cpmcwms.finance.dto.CostCalculateDTO;
import com.cpmc.cpmcwms.finance.fatory.MeasureUnitFactory;
import com.cpmc.cpmcwms.finance.service.MeasureUnitAbstract;
import org.springframework.stereotype.Component;
/**
* @author wuzhenyong
* ClassName:MeasureUnitYuanService.java
* date:2022-03-08 13:51
* Description:单位元
*/
@Component
public class MeasureUnitYuanService extends MeasureUnitAbstract {
/**
* 计算
*/
@Override
public void calculateCost(CostCalculateDTO dto) {
System.out.println("单位元");
}
@Override
public void afterPropertiesSet() throws Exception {
MeasureUnitFactory.registerMeasureUnitService(FinanceConstant.CALCULATE_UNIT_TYPE_ZERO, this);
}
}
package com.cpmc.cpmcwms.finance.service.impl;
import com.cpmc.cpmcwms.finance.constant.FinanceConstant;
import com.cpmc.cpmcwms.finance.dto.CostCalculateDTO;
import com.cpmc.cpmcwms.finance.fatory.MeasureUnitFactory;
import com.cpmc.cpmcwms.finance.service.MeasureUnitAbstract;
import org.springframework.stereotype.Component;
/**
* @author wuzhenyong
* ClassName:MeasureUnitYuanCarService.java
* date:2022-03-08 13:51
* Description:单位元/车
*/
@Component
public class MeasureUnitYuanCarService extends MeasureUnitAbstract {
/**
* 计算
*/
@Override
public void calculateCost(CostCalculateDTO dto) {
System.out.println("单位元/车");
}
@Override
public void afterPropertiesSet() throws Exception {
MeasureUnitFactory.registerMeasureUnitService(FinanceConstant.CALCULATE_UNIT_TYPE_ONE, this);
}
}
4、测试类
@Test
@SneakyThrows
void should_Yuan_success_then_factory_given_0() {
MeasureUnitAbstract measureUnitService = MeasureUnitFactory.getMeasureUnitService("0");
measureUnitService.calculateCost(new CostCalculateDTO());
}