[英]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.