但在特定情况下,我有活动反对(不知道哪类儿童)并且必须写出一种对所有实体物体都不同的方法。
简单地使基类抽象,界定每个子类别必须执行的抽象方法:
public abstract class ActivityService{
public abstract Foo processEntity(Entity entity);
}
PROBLEM: 如果有办法,我可以称之为基于实体目标一的不同服务。
这是你应努力避免的情况。 通常,你只应派遣一个实体来提供服务,了解与它做些什么,而不是一个负责的部门。 但是,我这样做的是使用一个发送器服务,保存一个服务所负责的班级地图。 它采用这样的逻辑:
private Map<Class<? extends Entity>,
Class<? extends ActivityService>> serviceMap =
new ConcurrentHashMap<Class<? extends Entity>,
Class<? extends ActivityService>>();
private ApplicationContext context;
private ActivityService getServiceForEntity(Entity e){
Class<? extends Entity> entityClass = e.getClass();
Class<? extends ActivityService> serviceClass =
serviceMap.get(entityClass);
if(serviceClass==null){
for(Map.Entry<Class<? extends Entity>,
Class<? extends ActivityService>> entry :
serviceMap.entrySet()){
if(entry.getKey().isAssignableFrom(entityClass)){
serviceClass = entry.getValue();
break;
}
}
if(serviceClass==null){
// throw a suitable exception
}
serviceMap.put(entityClass, serviceClass);
}
return context.getBean(serviceClass);
}