1. EqualL2
Changes in body
Source | HTML | Preview
@@ -1,56 +1,72 @@
普通:
-`code`public class Singleton1 {
+
+```java
+public class Singleton1 {
public final static Singleton1 INSTANCE = new Singleton1 ();
private Singleton1 () { }
-}`code`
+}
+```
進化バージョン:リフレクションでインスタンス作成防止
+
+```java
public class Singleton2 {
private static boolean INSTANCE_CREATED;
public final static Singleton2 INSTANCE = new Singleton2 ();
private Singleton2 () {
if (INSTANCE_CREATED) {
throw new IllegalStateException("Singletonパターン です");
} else {
INSTANCE_CREATED = true;
}
}
+```
Static Factoryバージョン:static factory
+
+```java
public class Singleton3 {
public final static Singleton3 INSTANCE = new Singleton3 ();
private Singleton3 () { }
public static Singleton3 getInstance() { return INSTANCE; }
}
+```
Lazy Initialization(遅延初期化):
+
+```java
public class Singleton4 {
private Singleton4() {
}
public static Singleton4 getInstance() {
return Singleton4Holder.INSTANCE;
}
private static class Singleton4Holder{
private static final Singleton4 INSTANCE = new Singleton4 ();
}
}
+```
Enum使用
+
+```java
public enum EnumSingleton {
INSTANCE;
public static EnumSingleton getInstance() { return INSTANCE; }
}
+```
+
EnumはSingletonにはぴったりみたいです。
理由は下記となっていますが、検証したこないので、わかりません。
1、クーロンできない
2、シリアライズしても、データコピー取得でいない
3、リフレクションもできない
https://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.9