设计模式之策略模式(结合Spring)

本文介绍了如何在Java中结合Spring框架来应用策略模式。详细讨论了工厂定义、策略模板,以及具体的策略A和策略B的实现,最后阐述了通过接口调用来灵活选择策略的过程。

工厂定义

@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){
        // do sth
    }
}

策略B

@Service
public class BHandler extends AbstractsHandler{

    @Override
    public void bbb(String name){
        // do sth
    }
}

接口调用

 @Test
  public void testStrategy() throws Exception {
      AbstractsHandler service = StrategyFactory.get(BHandler.class.getSimpleName());
      service.bbb("test");
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值