gpt4 book ai didi

java - 更灵活的工厂

转载 作者:行者123 更新时间:2023-11-30 07:20:28 24 4
gpt4 key购买 nike

我目前正在为学校做一个小项目。在我的 Java 应用程序中,我需要一个数据库,我希望能够使我的应用程序能够使用不同类型的数据库。所以我目前实现了一个 txt 数据库和一个 PostgreSQL。将来,应该可以添加其他数据库类型。像 XML 或 MySQL,...

为了创建数据库实例,我设计了一个使用枚举的工厂。它工作得很好,但在我的选择中它并不是很灵活。所以,我做了一些研究,但没有找到一个对我来说很清楚的真正好的例子。

这是我的枚举:

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);
}
}
}

我的目标是以后只编辑枚举,而不触及工厂本身。这应该给我足够的灵 active ,但我不知道如何做到这一点。

最佳答案

您可以将工厂放在 enum 本身中。

public enum DatabaseType {
TXT {
@Override
public Database createDatabase(String databaseName) {
return new FileDatabase(databaseName);
}
},
SQL {
@Override
public Database createDatabase(String databaseName) {
return new SQLDatabase(databaseName);
}
},
XML {
@Override
public Database createDatabase(String databaseName) {
return new XMLDatabase(databaseName);
}
};

public abstract Database createDatabase(String databaseName);
}

在 Java 中,enum 不仅仅是整数值的好名字(就像在 C 中一样)。将 enum 视为具有固定数量实例的类的更好方法。结合匿名类的概念,您可以为枚举中的每个值赋予特定于该值的不同属性和方法。

关于java - 更灵活的工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14005993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com