策略和工厂模式小例子
目录结构
1 创建策略接口
package com.example.myspingbootdemo.strategy;
public interface IStrategy <P> {
Integer getType ();
default void preCheck(){
System.out.println("precheck");
}
}
2 构建工厂
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
@Component
@RequiredArgsConstructor
public class Factory<T> implements InitializingBean {
private final List<IStrategy<T>> iStrategyList;
private Map<Integer,IStrategy<T>> strategyMap;
@Override
public void afterPropertiesSet() throws Exception {
strategyMap = iStrategyList.stream()
.collect(Collectors.toMap(IStrategy :: getType, Function.identity(),
(existing,replacement) -> replacement));
}
public IStrategy<T> get (Integer type){
return strategyMap.get(type);
}
}
3 构建实现类 (1)
在这里插入代码片
4 构建实现类(2)
package com.example.myspingbootdemo.strategy.impl;
import com.example.myspingbootdemo.strategy.IStrategy;
import com.example.myspingbootdemo.strategy.StrategyEnum;
import org.springframework.stereotype.Service;
@Service
public class IStrategyTwoImpl implements IStrategy {
@Override
public Integer getType() {
return StrategyEnum.TYPE_TWO.getCode();
}
@Override
public void preCheck() {
System.out.println(StrategyEnum.TYPE_TWO.getDesc());
}
}
5 业务实现类
package com.example.myspingbootdemo.strategy;
import cn.hutool.core.lang.Assert;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class BusService<T> {
private final Factory<T> factory;
public void testStartegy(Integer type){
IStrategy<T> iStrategy;
iStrategy = factory.get(type);
Assert.notNull(iStrategy,"暂时无法出来");
iStrategy.preCheck();
}
}
最近感悟
生命中最重要的不是你遇到了什么,而是你如何应对。面对挑战和困难,不要退缩,而是勇敢地迎接它们。
每一次的跌倒都是一次重生的机会,每一次的失败都是一次重新开始的机会。
不要让别人的眼光和评价左右你的人生,你的价值和意义是由自己创造的。
相信自己,坚持自己的梦想,你一定能够实现自己的人生价值,成就自己的辉煌