【发布时间】:2012-12-22 19:43:16
【问题描述】:
我目前正在为学校做一个小项目。在我的 Java 应用程序中,我需要一个数据库,并且我想让我的应用程序能够使用不同类型的数据库。所以我目前实现了一个 txt 数据库和一个 PostgreSQL。将来,应该可以添加其他数据库类型。像 XML 或 MySQL,...
为了创建一个数据库实例,我设计了一个使用枚举的工厂。它工作得很好,但在我的opionio中它并不是真正的灵活。所以,我做了一些研究,但没有找到一个对我来说很清楚的好例子。
这是我的枚举:
public enum DatabaseType {
TXT,
SQL,
XML;
}
这是我的工厂:
public class DatabaseFactory {
public Database createDatabase(DatabaseType type, String databaseName) throws DatabaseException {
if(type.equals(DatabaseType.TXT)) {
return new FileDatabase(databaseName);
}else if(type.equals(DatabaseType.SQL)) {
return new SQLDatabase(databaseName);
}else if(type.equals(DatabaseType.XML)) {
return new XMLDatabase(databaseName);
}else {
//default
return new FileDatabase(databaseName);
}
}
}
我的目标是将来只编辑枚举,而不涉及工厂本身。这应该给我足够的灵活性,但我不知道我该怎么做。
【问题讨论】:
-
一种选择是将它放在枚举本身中。
-
@DaveNewton,我猜你还需要 if-else-if 或 switch-case 结构吗?
-
否,例如,请参阅 Mattias 的回答,或者将枚举映射到一个简单的工厂(如果您有时需要额外的逻辑,那就太好了)等等。您可以使用 if -声明。