auto commit

This commit is contained in:
CyC2018 2018-09-06 18:38:45 +08:00
parent 8674be4460
commit 941f8e352c

View File

@ -177,44 +177,46 @@ public class Singleton {
#### Ⅵ 枚举实现 #### Ⅵ 枚举实现
使用单元素的枚举类型来实现单例模式,相对于常规的单例模式,枚举实现的单例天生具有防止反射实例化对象和反序列化产生实例化对象,而且代码更加简洁,非常适合单例模式场景下使用。以下是枚举单例模式的实现。 ```java
public enum Singleton {
```java INSTANCE;
public enum EnumSingleton {
INSTANCE; //单元素枚举实现单例
private String objName; private String objName;
public String getObjName() { public String getObjName() {
return objName; return objName;
} }
public void setObjName(String objName) { public void setObjName(String objName) {
this.objName = objName; this.objName = objName;
} }
public static void main(String[] args) { public static void main(String[] args) {
// 单例测试 // 单例测试
EnumSingleton firstSingleton = EnumSingleton.INSTANCE; Singleton firstSingleton = Singleton.INSTANCE;
firstSingleton.setObjName("firstName"); firstSingleton.setObjName("firstName");
System.out.println(firstSingleton.getObjName()); System.out.println(firstSingleton.getObjName());
Singleton secondSingleton = Singleton.INSTANCE;
EnumSingleton secondSingleton = EnumSingleton.INSTANCE;
secondSingleton.setObjName("secondName"); secondSingleton.setObjName("secondName");
System.out.println(firstSingleton.getObjName()); System.out.println(firstSingleton.getObjName());
System.out.println(secondSingleton.getObjName()); System.out.println(secondSingleton.getObjName());
// 反射获取实例测试 // 反射获取实例测试
try { try {
EnumSingleton[] enumConstants = EnumSingleton.class.getEnumConstants(); Singleton[] enumConstants = Singleton.class.getEnumConstants();
for (EnumSingleton enumConstant : enumConstants) { for (Singleton enumConstant : enumConstants) {
System.out.println(enumConstant.getObjName()); System.out.println(enumConstant.getObjName());
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
}
``` ```
该实现在多次序列化再进行反序列化之后,不会得到多个实例。而其它实现,为了保证不会出现反序列化之后出现多个实例,需要使用 transient 修饰所有字段,并且实现序列化和反序列化的方法。 该实现在多次序列化再进行反序列化之后,不会得到多个实例。而其它实现,为了保证不会出现反序列化之后出现多个实例,需要使用 transient 修饰所有字段,并且实现序列化和反序列化的方法。