SPRING策略模式
应用场景:当你对外发布一支接口,功能是根据一个入参类型走不同分支,并且每个分支逻辑都很复杂,但如果你用
if(type == 1){ ... }else if(type == 2){ ... }else{ ... }
会比较丑陋,且不利于扩展。
此时策略模式模式就诞生了。
定义一个接口类BaseEventService,每个分支就写一个实现类,最后通过策略类EventStrategyService来作为入口。
案例如下:
接口类:BaseEventService
public interface BaseEventService { int getType(); void doEvent(); }
实现类1:SaveEventService
@Service public class SaveEventService implements BaseEventService { @Override public int getType() { return 0; } @Override public void doEvent() { System.out.println("===save==="); } }
实现类2:UpdateEventService
@Service public class UpdateEventService implements BaseEventService { @Override public int getType() { return 1; } @Override public void doEvent() { System.out.println("===update==="); } }
策略类:EventStrategyService
@Service public class EventStrategyService implements InitializingBean { @Autowired private Set<BaseEventService> serviceList; private HashMap<Integer,BaseEventService> map = new HashMap<>(); public void doEvent(int type){ BaseEventService s = map.get(type); s.doEvent(); } @Override public void afterPropertiesSet() throws Exception { for (BaseEventService s : serviceList) { map.put(s.getType(), s); } } }
显而易见,Controller通过注入EventStrategyService,并且调用doEvent(int type)可以使得调用不同实现类