java-从列表中获取处理案例的服务

前端之家收集整理的这篇文章主要介绍了java-从列表中获取处理案例的服务 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一些实现接口的处理程序.每个处理程序应根据一种或多种类型为某些情况提供服务.我通过自动连线获得了这些处理程序的列表.
因此,当我想在这些迭代器上使用这些处理程序并检查其中一些是否处理该情况时,如果可以,请在该情况下运行它.
如此处所述-

  1. @Service
  2. public class CarCreator implments ICreator{
  3. @Override
  4. public boolean shouldServe(IEntity entity){
  5. entity.getType().equal(Type.Car);
  6. }
  7. @Override
  8. public boolean crate(IEntity entity){ .. some code ...}
  9. }
  10. @Service
  11. public class HouseCreator implments ICreator{
  12. @Override
  13. public boolean shouldServe(IEntity entity){
  14. entity.getType().equal(Type.House);
  15. }
  16. @Override
  17. public boolean crate(IEntity entity){ .. some code ...}
  18. }
  19. @Service
  20. public class AnimalCreator implments ICreator{
  21. @Override
  22. public boolean shouldServe(IEntity entity){
  23. entity.getType().equal(Type.Animal);
  24. }
  25. @Override
  26. public boolean crate(IEntity entity){ .. some code ...}
  27. }
  28. interface ICreator{
  29. boolean shouldServe(IEntity entity);
  30. public boolean crate(IEntity entity);
  31. }
  32. public void EntitiesCreatorManger{
  33. List<ICreator> creators;
  34. @Autowired
  35. public EntitiesCreatorManger(List<ICreator> creators){ this.creators = creators;}
  36. public void createEntities(List<IEntity> entitites){
  37. entities.stream.forEach(entity-> {
  38. for(ICreator creator : creators){
  39. if(creator.shouldServe(entity){
  40. creator.create(entity);
  41. break;
  42. }
  43. }
  44. }
  45. }

我想以更优雅的方式做到这一点,而不是让系统中的每个接口列表都这样使用.有这种方法吗?

最佳答案
将您所有的ICreators放置在查找图中:

  1. Map<IEntity,ICreator> map = ...
  2. ICreator creator = map.get(entity);
  3. if(creator != null) {
  4. ...}

猜你在找的Spring相关文章