工厂定义
@Component
public class StrategyFactory implements InitializingBean, ApplicationContextAware {
private ApplicationContext applicationContext;
private static final Map<String, AbstractsHandler> handlerMap = new HashMap<>();
public static AbstractsHandler get(String name) {
return handlerMap.get(name);
}
@Override
public void afterPropertiesSet() throws Exception {
Map<String, AbstractsHandler> beansMap = applicationContext.getBeansOfType(AbstractsHandler.class);
if (Objects.isNull(beansMap) || beansMap.isEmpty()) {
return;
}
beansMap.forEach(handlerMap::put);
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
策略模板
public abstract class AbstractsHandler {
public void aaa(String name){
throw new UnsupportedOperationException();
}
public void bbb(String name){
throw new UnsupportedOperationException();
}
}
策略A
@Service
public class AHandler extends AbstractsHandler{
@Override
public void aaa(String name){
}
}
策略B
@Service
public class BHandler extends AbstractsHandler{
@Override
public void bbb(String name){
}
}
接口调用
@Test
public void testStrategy() throws Exception {
AbstractsHandler service = StrategyFactory.get(BHandler.class.getSimpleName());
service.bbb("test");
}