使用java作为输入参数类的工厂模式
我有一个方法,它根据行为返回受尊重的工厂,它应该返回受尊重的工厂对象。我应该如何使用java实现这一点使用java作为输入参数类的工厂模式,java,design-patterns,Java,Design Patterns,我有一个方法,它根据行为返回受尊重的工厂,它应该返回受尊重的工厂对象。我应该如何使用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 EntiryFact
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{
}
我建议您创建两个基类,一个用于实体,一个用于VO 例如:
public abstract class Entity implements Serializable {
}
public abstract class AbstractVO {
}
然后,为每个对象的工厂使用一个模式
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();
}
}
}
如果我正确理解了您的问题,我相信您本质上是在问如何从
getCurrentBehavior(类行为)
由于参数是一个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;
}
您的工厂是否有不同实现的通用抽象?
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;
}