微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

@Service
public class CarCreator implments ICreator{

   @Override
   public boolean shouldServe(IEntity entity){
     entity.getType().equal(Type.Car);
   }

   @Override
   public boolean crate(IEntity entity){ .. some code ...}

}


@Service
public class HouseCreator implments ICreator{

   @Override
   public boolean shouldServe(IEntity entity){
     entity.getType().equal(Type.House);
   }

   @Override
   public boolean crate(IEntity entity){ .. some code ...}

}


@Service
public class AnimalCreator implments ICreator{

   @Override
   public boolean shouldServe(IEntity entity){
     entity.getType().equal(Type.Animal);
   }

   @Override
   public boolean crate(IEntity entity){ .. some code ...}

}


interface ICreator{
   boolean shouldServe(IEntity entity);


   public boolean crate(IEntity entity);
}


public void EntitiesCreatormanger{
   List<ICreator> creators;

   @Autowired
   public EntitiesCreatormanger(List<ICreator> creators){ this.creators = creators;}

   public void createEntities(List<IEntity> entitites){
     entities.stream.forEach(entity-> {
        for(ICreator creator : creators){
             if(creator.shouldServe(entity){
                  creator.create(entity);
                  break;
             }
        }
   }

}

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐