I have studied the use of Enum to implement Singleton design pattern as Java ensures that any enum value is instantiated only once in a Java program. Since Java Enum values are globally accessible, so is the 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"));
}
}
How can I convert this class into enum singleton?
You can create an enum and add one constructor to translate these predefined values. One example below:-
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 implementation using 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);
}
}
Main class implementation:
public class Scratch_1 {
public static void main(String[] args) {
ConfigManagerWithEagerInitialization configManager = ConfigManagerWithEagerInitialization.INSTANCE;
System.out.println(configManager.get("password"));
}
}
Output:
pa$$w0rD
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.