有多个 if...else
等条件分支,并且每个条件分支,可以封装起来替换的,可以使用策略模式来优化
- 一个接口
1 2 3 4 5 6 7 8 9 10 11 12 13
| public interface IFileStrategy {
FileTypeEnum getFileType();
void resolve(Object param); }
JAVA
|
- 一个枚举,及实现类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| public enum FileTypeEnum { A, B, C; }
@Component public class AFileResolve implements IFileStrategy { private static final Logger log = LoggerFactory.getLogger(AFileResolve.class);
@Override public FileTypeEnum getFileType() { return FileTypeEnum.A; }
@Override public void resolve(Object param) { log.info("A 类型解析文件,参数:{}", param); } }
@Component public class BFileResolve implements IFileStrategy { private static final Logger log = LoggerFactory.getLogger(BFileResolve.class);
@Override public FileTypeEnum getFileType() { return FileTypeEnum.B; }
@Override public void resolve(Object param) { log.info("B 类型解析文件,参数:{}", param); } }
JAVA
|
- 用
ApplicationContextAware
接口,把策略初始化到 map 里面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| @Component public class StrategyUseService implements ApplicationContextAware { private Map<FileTypeEnum, IFileStrategy> iFileStrategyMap = new HashMap<>();
public void resolveFile(FileTypeEnum fileTypeEnum, Object param){ IFileStrategy iFileStrategy = iFileStrategyMap.get(fileTypeEnum); if (iFileStrategy != null) { iFileStrategy.resolve(param); } }
@Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { Map<String, IFileStrategy> tempMap = applicationContext.getBeansOfType(IFileStrategy.class); tempMap.values().forEach(strategyService -> iFileStrategyMap.put(strategyService.getFileType(), strategyService)); } }
JAVA
|