【发布时间】:2014-07-06 11:00:13
【问题描述】:
正如你在下图中看到的我有一个在运行时创建实体的工厂模式。当我研究我的数据库时,我决定有一个学生和一个教授是“ISA”人,因为他们有一些共同的领域(比如名字和前名)。
同样,我决定“ISA”教授有常任和副教授。
在运行时,用户选择“教授”、“学生”等实体,而不是人。所以在这种情况下,我必须创建新的教授、学生等实体。同样,当用户选择教授实体时,它必须决定要创建哪种类型的教授。
到目前为止我创建的工厂的代码是这样的
public class EntityFactory {
protected String entityType;
public EntityFactory(String personType){
this.entityType = entityType;
}
public Entity createEntity(){
if(entityType.equalsIgnoreCase("Student")){
return new Student();
}
else if(entityType.equalsIgnoreCase("Professor")){
return new Professor();
}
//...
}
}
我想知道:如何“传递” Person 和 Professor 抽象实体来创建我想要的特定实体?这可行吗?还是我需要为我设置为抽象的实体创建不同的工厂?在这种情况下,我将如何将这些工厂与“父”工厂联系起来?
【问题讨论】:
-
这家工厂的意义何在?如果我想创建一个新学生,为什么我要调用类型不安全的
Student s = (Student) factory.create("Student")而不是简单地调用Student s = new Student()? -
因为我不知道用户将在运行时选择要创建的实体。有很多实体,而不仅仅是这 2 个。
-
@VassilisDe 没有回答@JBNizet 的问题。首先在哪里/为什么需要
Person类型?为什么需要这种抽象?如果您在Professor和Student中只有公共字段,最好 IMO 将它们分组到可重用的值对象(Address、Name等)中,而不是盲目地抓住这个机会来创建基类。 -
@guillaume31 我不确定我是否完全理解 IMO 的意思......
-
@VassilisDe www.urbandictionary.com/define.php?term=imo ;)
标签: java design-patterns abstract-factory