当前位置: 代码迷 >> 综合 >> 策略模式范例
  详细解决方案

策略模式范例

热度:63   发布时间:2024-03-09 14:53:49.0

工厂接口:OrderRuteService

public interface OrderRuteService {void queryOrder(String orderNo);
}

工厂接口实现:OrderRuteServiceImpl

@Service
public class OrderRuteServiceImpl implements OrderRuteService, ApplicationContextAware, InitializingBean {private ApplicationContext context;private Map<String, OrderSpi> orderSpiMap = new HashMap<>();@Overridepublic void queryOrder(String type) {OrderSpi orderSpi = this.getOrderSpi(type);orderSpi.queryOrder();}//项目启动时,将所有继承了OrderSpi的类初始化,并放入本类的orderSpiMap中@Overridepublic void afterPropertiesSet() throws Exception {Map<String, OrderSpi> spis = this.context.getBeansOfType(OrderSpi.class);for (String s : spis.keySet()) {System.out.println("spiName=" + s);}for (OrderSpi spi : spis.values()) {orderSpiMap.put(StringUtils.lowerCase(spi.getName()), spi);}}@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.context = applicationContext;}public <T extends OrderSpi> T getOrderSpi(String name) {return (T) this.orderSpiMap.get(name.toLowerCase());}
}

业务接口:OrderSpi

public interface OrderSpi {void queryOrder();String getName();
}

业务接口实现:xxxOrderSpi

@Component("xxxOrderSpi")
public class xxxOrderSpi implements OrderSpi {public static final String SPI_NAME = "xxx";@Overridepublic void queryOrder() {System.out.println("xxx进来了");}@Overridepublic String getName() {return SPI_NAME;}
}
  相关解决方案