我有一个返回受尊重的工厂的方法基于它应该返回尊重的Factory对象的行为。我应该如何使用java实现这个?
public Object getCurrentBehaviour(Class behavior) {
//e.g behavior type is entity it should return entity factory
//if behavior type is VO it should return VO factory
}
class EntiryFactory{
}
class VoFactory{
}
答案 0 :(得分:2)
我建议你创建2个基类,1个用于实体,1个用于VO。
示例:
public abstract class Entity implements Serializable {
}
public abstract class AbstractVO {
}
然后,为每个对象的Factory
使用Abstract Factory模式public AbstractFactory {
private AbstractFactory() {}
public abstract Factory getFactory(Class clazz) {
if (Entity.class.isAssignableFrom(clazz)) {
return new EntityFactory();
}
if (AbstractVO.class.isAssignableFrom(clazz)) {
return new VOFactory();
}
return null;
}
}
我正在使用Class.isAssignableFrom()
方法来表示子类可以从父类中分配(如果您理解我想说的话,它会这样做)。这就是诀窍。
为此,我会为每个对象制作一个工厂
public abstract Factory<T> {
public abstract T createObject();
}
public class EntityFactory extends Factory<Entity> {
public Entity createObject(Class entityClass) {
try {
return entityClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class VOFactory extends Factory<AbstractVO> {
public AbstractVO createObject(Class voClass) {
try {
return voClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
}
最后,获取对象
Entity entity = (Entity)AbstractFactory.getFactory(Entity.class).createObject();
答案 1 :(得分:0)
如果我正确理解了您的问题,我相信您实际上是在询问如何从getCurrentBehaviour(Class behaviour)
由于参数是Class
对象,您可以使用Class.isAssignableFrom(Class c)
来检查此Class
对象所代表的类或接口是否与超类或者是超类或由指定的Class
参数表示的类或接口的超接口。
这里是:
public Object getCurrentBehaviour(Class behavior) {
if(behavior.isAssignableFrom(EntiryFactory.class) {
// create an instance of EntiryFactory
}
else if(behavior.isAssignableFrom(VoFactory.class) {
// create an instance of VoFactory
}
return created_instance;
}