加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 01:17:36 所属栏目:大数据 来源:网络整理
导读:我有一些实现接口的处理程序.每个处理程序应根据一种或多种类型为某些情况提供服务.我通过自动连线获得了这些处理程序的列表. 因此,当我想在这些迭代器上使用这些处理程序并检查其中一些是否处理该情况时,如果可以,请在该情况下运行它. 如此处所述- @Service

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

@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) {
...}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读