策略模式

2019-07-17  本文已影响0人  悲伤的大橙子

模式分析

每个类封装一种策略,为了保证这些策略的一致性,用一个抽象的策略类来做业务定义。 业务系统中的策略模式.png
 public static getStrategy(OrderDetailDO context) {
     for(Iterator<AbstractStrategy> it = INSTANCE.iterator();it.hasNext(); ){
         AbstractStrategy strategy = it.next();
         if(strategy.matchStrategy(context)){
              return strategy;
         }
      }
      return null;
 }

定义注册方法:

 public static synchronized void register(AbstractStrategy strategy){
     INSTANCE.add(strategy);
     Collections.sort(INSTANCE, new Comparator<AbstractStrategy>(){
         @Override
         public int compare(AbstractStrategy o1, AbstractStrategy o2){
             return o1.getPriority().compareTo(o2.getPriority());
         }
     });
  }

难点

如何确定什么时候用哪个策略呢?

ApplicationContext动态注册:获取注入Spring的名称,用于注册过程中从Spring中获取bean,从而AOP等注解可以生效。

@Resource
private ApplicationContext applicationContext;
AbstractStrategy strategy = (AbstractStrategy)applicationContext.getBean(getBeanName());

注册完成即向策略队列INSTANCE中加入一个新的策略类,按每个策略类的优先级进行排序。

上一篇 下一篇

猜你喜欢

热点阅读