Aware接口实现策略模式
- 实现方式:
- choose()方法获得的抽象类具体实现,根据不同实现的方法获取不同配置、属性或某一类东西
@Autowired
private TypeChooser typeChooser;
public void test() {
TypeHandler typeHandler = typeChooser.choose("1");
typeHandler.getFileNameByEventType();
typeHandler.getFileNamePrefixByEventType();
}
@Component
public class TypeChooser implements ApplicationContextAware {
private Map<String, TypeHandler> chooseMap = new HashMap<>();
private ApplicationContext context;
public TypeHandler choose(String type) {
return chooseMap.get(type);
}
@PostConstruct
public void register() {
Map<String, TypeHandler> solverMap = context.getBeansOfType(TypeHandler.class);
for (TypeHandler solver : solverMap.values()) {
for (String support : solver.supports()) {
chooseMap.put(support, solver);
}
}
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.context = applicationContext;
}
}
public abstract class TypeHandler {
public abstract String[] supports();
public abstract void getFileNameByEventType();
public abstract void getFileNamePrefixByEventType();
public abstract void solve3();
}
@Component
public class PuAppoint extends TypeHandler {
@Override
public String[] supports() {
return new String[] {"1"};
}
@Override
public void getFileNameByEventType() {
String puAppoint = XmlFileNameConstant.PU_APPOINT;
}
@Override
public void getFileNamePrefixByEventType() {
String puAppoint = XmlFileNamePrefixConstant.PU_APPOINT;
}
@Override
public void solve3() {
System.out.println("预约提货");
}
}
@Component
public class DelAppoint extends TypeHandler {
@Override
public String[] supports() {
return new String[]{"2"};
}
@Override
public void getFileNameByEventType() {
System.out.println("预约卸货.xml");
}
@Override
public void getFileNamePrefixByEventType() {
System.out.println("预约卸货");
}
@Override
public void solve3() {
System.out.println("预约卸货");
}
}