1.定义策略接口
策略接口
/**
* 车辆事件接口
*/
public interface CarEvent {
/**
* 车辆状态变更事件
*/
void carStatusChangeEvent();
}
2.定义各种策略
定义各种实现策略,电子围栏、实时数据 等都实现这个接口。
电子围栏
/**
* 电子围栏 ElectronicFence
*/
@Service("electronicFence")
public class ElectronicFence implements CarEvent {
@Override
public void carStatusChangeEvent() {
System.out.println("电子围栏");
}
}
实时数据
/**
* 实时数据 RealTimeData
*/
@Service("realTimeData")
public class RealTimeData implements CarEvent {
@Override
public void carStatusChangeEvent() {
System.out.println("实时数据");
}
}
这里我把所有实现类都用 @Service 注解生成 Bean 放入 Spring Bean 容器中了,在使用策略的时候就不用 new 支付对象了,可以直接使用 Bean。
示例代码
@Autowired
private CarNet carNet;
@Autowired
private ApplicationContext applicationContext;
@GetMapping("/getList")
public List<String> getList(@RequestParam String vin) {
List<String> list = carNet.getList(vin);
list.forEach(s ->{
CarEvent bean = applicationContext.getBean(s, CarEvent.class);
bean.carStatusChangeEvent();
});
return list;
}
测试一下:
http://localhost:88/test/getList?vin=VIN123
打印结果: