mirror of
https://github.com/CyC2018/Interview-Notebook.git
synced 2026-11-06 17:34:09 +00:00
Update 设计模式 - 单例.md
按《Effective Java》原文调整对枚举单例的表述。
This commit is contained in:
+1
-1
@@ -186,7 +186,7 @@ java.lang.IllegalArgumentException: Cannot reflectively create enum objects
|
||||
|
||||
该实现在多次序列化和反序列化之后,不会得到多个实例。这是因为枚举常量序列化时只写入它的名字,反序列化时用 Enum.valueOf() 按名字找回已有的常量,这个过程不能自定义。而其它实现要实现 Serializable,反序列化时每次都会创建一个新对象,需要提供 readResolve() 方法返回已有的实例来替换它;transient 只决定字段是否参与序列化,不能保证实例唯一。
|
||||
|
||||
这几种写法中,《Effective Java》推荐单元素的枚举,它同时挡住了反射和反序列化;枚举不能继承其它类,单例需要继承某个父类时,用静态内部类实现。
|
||||
这几种写法中,《Effective Java》认为单元素的枚举通常是实现单例的最好方式,它同时挡住了反射和反序列化;枚举不能继承其它类,单例需要继承某个父类时,用静态内部类实现。
|
||||
|
||||
### 示例
|
||||
- 日志类;
|
||||
|
||||
Reference in New Issue
Block a user