[英]How to use Enum for singleton?
我研究了使用枚举来实现 Singleton 设计模式,因为 Java 确保任何枚举值在 Java 程序中仅实例化一次。 由于 Java 枚举值是全局可访问的,因此 singleton 也是如此。
class ConfigManagerWithEagerInitialization {
public static ConfigManagerWithEagerInitialization instance = new ConfigManagerWithEagerInitialization();
private Map<String, String> configMap = new HashMap<String, String>() {{
put("host", "internal.db");
put("port", "8179");
put("user", "admin");
put("password", "pa$$w0rD");
}};
private ConfigManagerWithEagerInitialization() {
}
public String update(String key, String value) {
return configMap.put(key, value);
}
public String get(String key) {
return configMap.get(key);
}
public static ConfigManagerWithEagerInitialization getInstance() {
return instance;
}
}
class Scratch_1 {
public static void main(String[] args) {
ConfigManagerWithEagerInitialization configManager = ConfigManagerWithEagerInitialization.getInstance() ;
System.out.println(configManager.get("password"));
}
}
我如何将这个 class 转换成枚举 singleton?
您可以创建一个枚举并添加一个构造函数来转换这些预定义的值。 下面的一个例子:-
public class Scratch_1 {
public static void main(String[] args) {
System.out.println(ConfigManagerWithEagerInitialization.PASSWORD.getValue());
}
}
public enum ConfigManagerWithEagerInitialization {
HOST("internal.db"), PORT("8179"), USER("admin"), PASSWORD("pa$$w0rD");
private String value;
ConfigManagerWithEagerInitialization(String s) {
this.value = s;
}
public String getValue() {
return this.value;
}
}
Singleton 使用Enum
实现
import java.util.HashMap;
import java.util.Map;
public enum ConfigManagerWithEagerInitialization {
INSTANCE;
private static final Map<String, String> CONFIGMAP = new HashMap<String, String>();
static {
CONFIGMAP.put("host", "internal.db");
CONFIGMAP.put("port", "8179");
CONFIGMAP.put("user", "admin");
CONFIGMAP.put("password", "pa$$w0rD");
}
public String update(String key, String value) {
return CONFIGMAP.put(key, value);
}
public String get(String key) {
return CONFIGMAP.get(key);
}
}
主要class实现:
public class Scratch_1 {
public static void main(String[] args) {
ConfigManagerWithEagerInitialization configManager = ConfigManagerWithEagerInitialization.INSTANCE;
System.out.println(configManager.get("password"));
}
}
Output:
pa$$w0rD
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.