我很困惑如何避免在我的经理方法(代码的最后一段)中使用套管,最终使用派生类(实体)和访客设计模式。下面我有一个名为BaseEntity的实体的抽象类。这不是一个真实的例子,只是伪代码。
public abstract class BaseEntity {
@Reference
protected List<String> items = new ArrayList<>();
public BaseEntity() {
}
public List<String> getItems() {
return items;
}
public void setItems(List<String> items) {
this.items = items;
}
}
下面我有来自抽象类的3个派生类。
@Entity("CollectionA")
public class EntityA extends BaseEntity {
//code
}
@Entity("CollectionB")
public class EntityB extends BaseEntity {
//code
}
@Entity("CollectionC")
public class EntityC extends BaseEntity {
//code
}
然后我创建了一个访问者,以便在我的经理中重复使用,以避免使用instanceOf。
public interface UpdateEntityVisitor {
void create(EntityA entityA);
void create(EntityB entityB);
void create(EntityC entityC);
}
public class UpdateEntityVisitorImpl implements UpdateEntityVisitor {
private final Factory factory;
public UpdateEntityVisitorImpl() {
factory = new FactoryImpl();
}
public UpdateEntityVisitorImpl(Factory factory) {
this.factory = factory;
}
@Override
public void create(EntityA entityA) {
factory.getEntityA().create(entityA);
}
@Override
public void create(EntityB entityB) {
factory.getEntityB().create(entityB);
}
@Override
public void create(EntityC entityC) {
factory.getEntityC().create(entityC);
}
}
最后,我的经理类有以下方法,我想避免从BaseEntity转到适当的类。有一种方法可以实现在经理中重复使用访客类吗?
public void updateEntity(BaseEntity entity) {
if (checkSmth()) {
updateCollectionA((EntityA) entity);
} else {
updateCollectionB((EntityB) entity);
}
}
我发现这个名为typeOf https://github.com/nurkiewicz/typeof的非常有用的库,但我想知道是否有其他方法可以让我现在的团队更清楚。
答案 0 :(得分:0)
使用泛型是否有效?
public <T extends BaseEntity> void updateEntity(T entity)
{
if (checkSmth())
updateCollectionA(entity);
else
updateCollectionB(entity);
}