Más contenido relacionado
La actualidad más candente (20)
Similar a 第1回 チキチキ『( ゜ェ゜)・;'.、ゴフッ』 - シングルトンパターン(Java) (20)
第1回 チキチキ『( ゜ェ゜)・;'.、ゴフッ』 - シングルトンパターン(Java)
- 4. new
Hoge a = new Hoge(); // 1
Hoge b = new Hoge(); // 2 NG
1
- 5. public class Cache {
//
public static final Cache INSTANCE = new
Cache();
private Cache() { } // new
public void put(String key, Object value){ ... }
public Object get(String key) { ... }
}
Cache.INSTANCE.put(key, value)
Object value = Cache.INSTANCE.get(key)
- 6. public class Cache {
private static final Cache INSTANCE = new Cache();
private Cache() { }
public static Cache getInstance() {
return INSTNACE;
}
public void put(String key, Object value){ ... }
public Object get(String key) { ... }
}
Cache.getInstance().put(key, value)
Object value = Cache.getInstance().get(key)
- 7. public class Cache {
private static ThreadLocal<Cache> threadLocal =
new ThreadLocal<Cache>() {
@Override protected Cache initialValue() {
return new Cache();
}
};
public static Cache getInstnace() {
return threadLocal.get();
}
public Object get(String key) { /* ... */ }
public void put(String key, Object value) { /* ... */
}
}
- 8. 1:
Effective Java 3
public class CacheClient {
//
public void process() { getCache().put(...); // ... }
// Cache
Cache getCache() {
return Cache.getInstance();
// ↑
// private
// new Cache() { ... }
// ...
}
}
- 9. public class SingletonCache implements Cache {
private static SingletonCache instance;
public static SingletonCache getInstnace() {
return instance;
}
@Override public Object get(String key) { /* ... */ }
@Override public void put(String key, Object value) { /* ... */ }
}
public class CacheClient {
// ...
Cache getCache() {
return new Cache(){ /* */ };
}
}
- 11. 3:
readObject
w( o )w!!!
Serializable
transient
...
readResolve
(GC)
...
private Object readResolve() throws
ObjectStreamException {
return INSTANCE; //
}
- 12. enum
public enum Cache {
INSTANCE;
public vod put(String key, Object
value) { /* ... */ }
public Object get(String key) {/* ...
*/ }
}
Cache.INSTANCE.put(key, value);
- 13. enum Jad ...
public final class Cache extends Enum<Cache>
{
public static final EnumSingleton INSTANCE;
private static final Cache $VALUES[];
static { INSTANCE = new
EnumSingleton("INSTANCE", 0);
$VALUES = (new Cache[] { INSTANCE }); }
private Cache(String s, int i){ super(s, i); }
// values, valueOf ...
}
- 15. (´ ∀ )
public class Singleton {
private static Singleton instance;
public synchronized static Singleton
getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
- 16. ( д ) ?!
public class Singleton {
//
private static class InstanceHolder {
private static final Singleton INSTANCE = new
Singleton();
}
public static Singleton getInstance() {
return InstanceHolder.INSTANCE;
}
}
- 17. ..(llil!´Д`lil)n{…??
public class Singleton {
private static volatile Singleton instance
public static Singleton getInstance() {
Singleton result = instance; // (1)
if (result == null) { // (2) =>
synchronized (Singleton.class) { // (3) :
result = instance; // (4)
if (result == null) { // (5)
result = instance = new Singleton(); // (6)
}
} // :
}
return result;
}
- 19. Scala object
object Cache {
def put(key:String, value:Any):Unit
= ...
def get(key:String):Any = ...
}
Cache.put(key, value)
val value = Cache.get(key)
- 20. object Singleton
public final class Cache$ implements ScalaObject
{
public static final Cache$ MODULE$ = new
Cache$();
private Cache$() { /* ... */ }
public void put(String key, Object value) { /* ...
*/ }
public Object get(String key) { /* ... */ }
}
Cache$.MODULE$.put(key, value)
Object value = Cache$.MODULE$.get(key)
Notas del editor
- \n
- &#x304B;&#x3068;&#x3046;&#x3067;&#x3059;&#x3002;&#x6700;&#x8FD1;&#x5F90;&#x3005;&#x306B;&#x5B9F;&#x4F53;&#x3092;&#x6652;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x304C;&#x3001;&#x3057;&#x3089;&#x306A;&#x3044;&#x4EBA;&#x3044;&#x308B;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x304C;&#x3001;&#x30C0;&#x30A4;&#x3061;&#x3083;&#x3093;&#x306E;&#x4E0A;&#x53F8;&#x3068;&#x3044;&#x3048;&#x3070;&#x308F;&#x304B;&#x308A;&#x307E;&#x3059;&#x304B;&#x306D;&#x3002;&#x6280;&#x8853;&#x7684;&#x306A;&#x7A81;&#x304D;&#x4E0A;&#x3052;&#x304C;&#x53B3;&#x3057;&#x3044;&#x306E;&#x3067;&#x3001;&#x9811;&#x5F35;&#x3063;&#x3066;&#x3044;&#x308B;&#x4E0A;&#x53F8;&#x3067;&#x3059;&#x306D;&#x3002;&#x306F;&#x3044;&#x3002;\n&#x6700;&#x8FD1;&#x306F;Scala&#x306E;&#x8A18;&#x4E8B;&#x66F8;&#x304D;&#x307E;&#x3057;&#x305F;&#x3002;&#x5165;&#x9580;&#x8005;&#x7528;&#x306E;&#x8A18;&#x4E8B;&#x306A;&#x306E;&#x3067;&#x308F;&#x304B;&#x308A;&#x3084;&#x3059;&#x3044;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;java-ja&#x3067;&#x306F;&#x3001;yuroyoro&#x3055;&#x3093;&#x306B;&#x30EC;&#x30D3;&#x30E5;&#x30FC;&#x983C;&#x307F;&#x307E;&#x3057;&#x305F;&#x3002;&#x3042;&#x308A;&#x304C;&#x3068;&#x3046;&#x3054;&#x3056;&#x3044;&#x307E;&#x3057;&#x305F;&#x3002;\n&#x305D;&#x308C;&#x3068;&#x3001;DDD&#x3082;&#x7D50;&#x69CB;&#x30C7;&#x30A3;&#x30FC;&#x30D7;&#x306B;&#x3084;&#x3063;&#x3066;&#x307E;&#x3059;&#x3002;2003&#x5E74;&#x306E;&#x767A;&#x520A;&#x3067;&#x5F85;&#x671B;&#x306E;&#x548C;&#x8A33;&#x304C;&#x3067;&#x307E;&#x3057;&#x305F;&#x3002;&#x30D5;&#x30A1;&#x30A6;&#x30E9;&#x30FC;&#x6C0F;&#x3082;&#x30B1;&#x30C3;&#x30C8;&#x30D9;&#x30C3;&#x30AF;&#x6C0F;&#x3082;&#x7D76;&#x8CDB;&#x3002;&#x65E5;&#x672C;&#x3060;&#x3068;&#x548C;&#x7530;&#x3055;&#x3093;&#x7B46;&#x982D;&#x306B;JavaEE&#x52C9;&#x5F37;&#x4F1A;&#x306B;&#x3088;&#x308A;&#x8CA2;&#x732E;&#x304C;&#x5927;&#x304D;&#x3044;&#x3067;&#x3059;&#x306D;&#x3002;&#x79C1;&#x3068;&#x30C0;&#x30A4;&#x3061;&#x3083;&#x3093;&#x3067;&#x4E3B;&#x306B;2&#x90E8;&#x306E;\n
- &#x30B7;&#x30F3;&#x30B0;&#x30EB;&#x30C8;&#x30F3;&#x3068;&#x306F;&#x3001;1&#x500B;&#x3057;&#x304B;&#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x3092;&#x4F5C;&#x3089;&#x306A;&#x3044;&#x3068;&#x3044;&#x3046;&#x30D1;&#x30BF;&#x30FC;&#x30F3;&#x3067;&#x3001;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30DE;&#x304C;&#x6CE8;&#x610F;&#x3092;&#x3057;&#x3066;&#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x3092;1&#x500B;&#x3057;&#x304B;&#x4F5C;&#x308C;&#x306A;&#x3044;&#x3067;&#x306F;&#x306A;&#x304F;&#x3001;&#x305D;&#x308C;&#x3092;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0;&#x4E0A;&#x3067;&#x8868;&#x73FE;&#x3059;&#x308B;&#x3068;&#x3044;&#x3046;&#x610F;&#x5473;&#x3067;&#x3059;&#x3002;\n
- &#x30D1;&#x30BF;&#x30FC;&#x30F3;&#x3092;&#x5229;&#x7528;&#x3057;&#x306A;&#x3044;&#x3067;&#x81EA;&#x7531;&#x306B;new&#x3055;&#x305B;&#x3066;&#x3044;&#x308B;&#x5834;&#x5408;&#x306F;&#x3001;&#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x6570;&#x3092;&#x5236;&#x5FA1;&#x3067;&#x304D;&#x307E;&#x305B;&#x3093;&#x3002;&#x3053;&#x308C;&#x306F;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30DE;&#x304C;&#x9811;&#x5F35;&#x3063;&#x3066;&#x5236;&#x5FA1;&#x3059;&#x308B;&#x306E;&#x3067;&#x306F;&#x306A;&#x304F;&#x3001;&#x3069;&#x306E;&#x3088;&#x3046;&#x306B;&#x3057;&#x3066;&#x3082;1&#x3064;&#x3060;&#x3051;&#x306B;&#x3059;&#x308B;&#x4ED5;&#x7D44;&#x307F;&#x3092;&#x63D0;&#x4F9B;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x76EE;&#x7684;&#x3067;&#x3059;&#x3002;\n
- &#x4F8B;&#x3048;&#x3070;&#x3001;&#x30AD;&#x30E3;&#x30C3;&#x30B7;&#x30E5;&#x306E;&#x5834;&#x5408;&#x3067;&#x3059;&#x306D;&#x3002;\n&#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x3092;&#x5B9A;&#x6570;&#x5316;&#x3057;&#x3066;&#x3001;&#x30B3;&#x30F3;&#x30B9;&#x30C8;&#x30E9;&#x30AF;&#x30BF;&#x3092;private&#x306B;&#x3057;&#x307E;&#x3059;&#x3002;&#x521D;&#x671F;&#x5316;&#x306F;&#x30A4;&#x30FC;&#x30AC;&#x30FC;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;&#x304C;&#x3001;&#x5178;&#x578B;&#x7684;&#x306B;&#x306F;&#x3053;&#x308C;&#x3067;&#x5341;&#x5206;&#x3067;&#x3059;&#x3002;&#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x5B9A;&#x6570;&#x306F;&#x3069;&#x3053;&#x3067;&#x3082;\n
- &#x6B21;&#x306F;&#x3001;getInstance&#x3068;&#x3044;&#x3046;&#x30D5;&#x30A1;&#x30AF;&#x30C8;&#x30EA;&#x30E1;&#x30BD;&#x30C3;&#x30C9;&#x3092;&#x7528;&#x610F;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;\nJVM&#x306E;&#x6700;&#x9069;&#x5316;&#x3092;&#x8003;&#x3048;&#x308C;&#x3070;&#x305D;&#x308C;&#x307B;&#x3069;&#x795E;&#x7D4C;&#x8CEA;&#x306B;&#x306A;&#x308B;&#x3053;&#x3068;&#x3067;&#x306F;&#x306A;&#x3044;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x304C;&#x3001;&#x3053;&#x306E;&#x5834;&#x5408;&#x306E;&#x30E1;&#x30EA;&#x30C3;&#x30C8;&#x306F;&#x3001;API&#x306B;&#x3088;&#x3063;&#x3066;&#x5185;&#x90E8;&#x5B9F;&#x88C5;&#x3092;&#x96A0;&#x853D;&#x3067;&#x304D;&#x308B;&#x3053;&#x3068;&#x3067;&#x3059;&#x306D;&#x3002;\n\n
- &#xFF1C;&#xFF1C;&#x3082;&#x3046;&#x3072;&#x3068;&#x3064;&#x306E;&#x30E1;&#x30BD;&#x30C3;&#x30C9;&#x3092;&#x4ECB;&#x3059;&#x308B;&#x3053;&#x3068;&#x306B;&#x3088;&#x308B;&#x30E1;&#x30EA;&#x30C3;&#x30C8;&#xFF1E;&#xFF1E;\n&#x30B7;&#x30F3;&#x30B0;&#x30EB;&#x30C8;&#x30F3;&#x306F;&#x300C;&#x30AF;&#x30E9;&#x30B9;&#x306E;&#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x304C;1&#x3064;&#x3057;&#x304B;&#x751F;&#x6210;&#x3055;&#x308C;&#x306A;&#x3044;&#x300D;&#x3068;&#x3044;&#x3046;&#x610F;&#x5473;&#x3067;&#x3059;&#x304C;&#x3001;\n&#x305D;&#x306E;&#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x306E;&#x30B3;&#x30F3;&#x30C6;&#x30AD;&#x30B9;&#x30C8;\n&#x3042;&#x308B;&#x30AF;&#x30E9;&#x30B9;&#x306E;&#x300C;&#x7279;&#x5B9A;&#x306E;&#x300D;&#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x304C;1&#x3064;&#x3057;&#x304B;&#x751F;&#x6210;&#x3055;&#x308C;&#x306A;&#x3044;&#x3001;&#x89E3;&#x91C8;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3059;&#x3002;\n&#x30FB;&#x305F;&#x3068;&#x3048;&#x3070;&#x3001;&#x9045;&#x5EF6;&#x521D;&#x671F;&#x5316;&#x3084;&#x3001;&#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x3092;&#x30B9;&#x30EC;&#x30C3;&#x30C9;&#x6BCE;&#x306B;&#x4F5C;&#x308B;&#x306A;&#x3069;&#x3067;&#x3059;&#x3002;\n&#x30FB;&#x3053;&#x306E;&#x4F8B;&#x3067;&#x306F;&#x3001; getInstance&#x3092;&#x547C;&#x3073;&#x51FA;&#x3057;&#x305F;&#x30B9;&#x30EC;&#x30C3;&#x30C9;&#x3054;&#x3068;&#x306B;&#x552F;&#x4E00;&#x306E;&#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x3092;&#x8FD4;&#x3057;&#x3066;&#x3044;&#x308B;&#x3002;\n&#x3000;&#x30FB;&#x5185;&#x90E8;&#x306E;&#x5B9F;&#x88C5;&#x3067;&#x306F;ThreadLocal&#x3092;&#x30B5;&#x30D6;&#x30AF;&#x30E9;&#x30C3;&#x30B7;&#x30F3;&#x30B0;&#x3057;&#x3066;&#x3001;initValue&#x3067;&#x521D;&#x671F;&#x5024;&#x3092;&#x8FD4;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;&#x3053;&#x306E;&#x521D;&#x671F;&#x5316;&#x306F;get&#x304C;&#x30C8;&#x30EA;&#x30AC;&#x30FC;&#x3068;&#x306A;&#x308B;&#x306E;&#x3067;&#x3001;&#x5B9F;&#x8CEA;&#x9045;&#x5EF6;&#x521D;&#x671F;&#x5316;&#x306E;&#x30B7;&#x30F3;&#x30B0;&#x30EB;&#x30C8;&#x30F3;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;&#x3002;\n
- &#x30C6;&#x30B9;&#x30C8;&#x5BFE;&#x8C61;&#x304C;&#x30B7;&#x30F3;&#x30B0;&#x30EB;&#x30C8;&#x30F3;&#x3068;&#x4F9D;&#x5B58;&#x3057;&#x3066;&#x3044;&#x308B;&#x5834;&#x5408;&#x306F;&#x3001;&#x30C6;&#x30B9;&#x30C8;&#x304C;&#x5384;&#x4ECB;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;&#x3002;\nCache&#x306E;&#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x3092;&#x30E2;&#x30C3;&#x30AF;&#x5B9F;&#x88C5;&#x306B;&#x7F6E;&#x304D;&#x63DB;&#x3048;&#x305F;&#x3044;&#x3068;&#x3057;&#x307E;&#x3059;&#x3002;\n&#x3057;&#x304B;&#x3057;&#x3001;private&#x30B3;&#x30F3;&#x30B9;&#x30C8;&#x30E9;&#x30AF;&#x30BF;&#x3060;&#x3068;&#x30B5;&#x30D6;&#x30AF;&#x30E9;&#x30B9;&#x5316;&#x3067;&#x304D;&#x307E;&#x305B;&#x3093;&#x3002;&#x30B3;&#x30F3;&#x30B9;&#x30C8;&#x30E9;&#x30AF;&#x30BF;&#x3092;protected&#x306B;&#x3059;&#x308B;&#x5834;&#x5408;&#x306F;&#x30B5;&#x30D6;&#x30AF;&#x30E9;&#x30B9;&#x5316;&#x3067;&#x304D;&#x307E;&#x3059;&#x304C;&#x3001;&#x305D;&#x308C;&#x3060;&#x3051;&#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x3092;&#x5236;&#x9650;&#x3067;&#x304D;&#x306A;&#x3044;&#x30EA;&#x30B9;&#x30AF;&#x304C;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;&#x30C8;&#x30EC;&#x30FC;&#x30C9;&#x30AA;&#x30D5;&#x3067;&#x3059;&#x306D;&#x3002;\n&#x3082;&#x3046;&#x4E00;&#x3064;&#x65B9;&#x6CD5;&#x306F;&#x3001;Cache&#x306E;&#x632F;&#x308B;&#x821E;&#x3044;&#x3092;&#x30A4;&#x30F3;&#x30BF;&#x30FC;&#x30D5;&#x30A7;&#x30A4;&#x30B9;&#x3092;&#x5B9A;&#x7FA9;&#x3057;&#x3001;&#x305D;&#x308C;&#x306E;&#x30B7;&#x30F3;&#x30B0;&#x30EB;&#x30C8;&#x30F3;&#x3068;&#x3057;&#x3066;&#x5B9F;&#x88C5;&#x3068;&#x3001;&#x30E2;&#x30C3;&#x30AF;&#x3068;&#x3057;&#x3066;&#x306E;&#x5B9F;&#x88C5;&#x3092;&#x30C6;&#x30B9;&#x30C8;&#x306E;&#x3068;&#x304D;&#x306B;&#x4F7F;&#x3044;&#x5206;&#x3051;&#x308B;&#x65B9;&#x6CD5;&#x304C;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;\n
- &#x30B7;&#x30F3;&#x30B0;&#x30EB;&#x30C8;&#x30F3;&#x306B;&#x3082;&#x30A4;&#x30F3;&#x30BF;&#x30FC;&#x30D5;&#x30A7;&#x30A4;&#x30B9;&#x3092;&#x7528;&#x610F;&#x3059;&#x308C;&#x3070;&#x3001;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x306B;&#x5BFE;&#x3057;&#x3066;JMock&#x3068;&#x304B;&#x3067;&#x30E2;&#x30C3;&#x30AF;&#x5316;&#x3059;&#x308B;&#x306A;&#x308A;&#x3001;&#x30C0;&#x30DF;&#x30FC;&#x306E;&#x30E2;&#x30C3;&#x30AF;&#x5B9F;&#x88C5;&#x3092;&#x4F5C;&#x308A;&#x306A;&#x308A;&#x304C;&#x3067;&#x304D;&#x307E;&#x3059;&#x3002;&#x3053;&#x308C;&#x3067;&#x3082;&#x3001;Cache&#x578B;&#x3092;&#x4F7F;&#x3046;&#x9650;&#x308A;&#x7F6E;&#x3044;&#x3066;&#x306F;&#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x306E;&#x6570;&#x306E;&#x7BA1;&#x7406;&#x304C;&#x7D50;&#x69CB;&#x96E3;&#x3057;&#x3044;&#x5370;&#x8C61;&#x3067;&#x3059;&#x3002;\n
- &#x6271;&#x3044;&#x65B9;&#x6B21;&#x7B2C;&#x3067;&#x30B0;&#x30ED;&#x30FC;&#x30D0;&#x30EB;&#x5909;&#x6570;&#x306B;&#x306A;&#x3063;&#x3066;&#x3057;&#x307E;&#x3046;&#x3002;\n&#x30B7;&#x30F3;&#x30B0;&#x30EB;&#x30C8;&#x30F3;&#x306F;&#x30B3;&#x30FC;&#x30C9;&#x306E;&#x4E2D;&#x306E;&#x3069;&#x3053;&#x304B;&#x3089;&#x3067;&#x3082;&#x540C;&#x4E00;&#x306E;&#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x306B;&#x30A2;&#x30AF;&#x30BB;&#x30B9;&#x3067;&#x304D;&#x308B;&#x304B;&#x3089;&#x3002;\n\n\n
- readObject&#x30E1;&#x30BD;&#x30C3;&#x30C9;&#x306F;&#x65B0;&#x305F;&#x306B;&#x751F;&#x6210;&#x3055;&#x308C;&#x305F;&#x30AA;&#x30D6;&#x30B8;&#x30A7;&#x30AF;&#x30C8;&#x3092;&#x8FD4;&#x3059;&#x306E;&#x3067;&#x3001;&#x30C7;&#x30B7;&#x30EA;&#x30A2;&#x30E9;&#x30A4;&#x30BA;&#x3059;&#x308B;&#x3068;&#x30B7;&#x30F3;&#x30B0;&#x30EB;&#x30C8;&#x30F3;&#x3068;&#x3057;&#x3066;&#x7834;&#x7DBB;&#x3059;&#x308B;&#x3093;&#x3067;&#x3059;&#x306D;&#x3002;\n
- Java5&#x4EE5;&#x964D;&#x3067;&#x3042;&#x308C;&#x3070;&#x3001;enum&#x306B;&#x4F7F;&#x3048;&#x3070;&#x30B7;&#x30F3;&#x30B0;&#x30EB;&#x30C8;&#x30F3;&#x306B;&#x3067;&#x304D;&#x3066;&#x3001;&#x5148;&#x307B;&#x3069;&#x306E;&#x30B7;&#x30EA;&#x30A2;&#x30E9;&#x30A4;&#x30BA;&#x304C;&#x7D61;&#x3093;&#x3067;&#x3082;&#x552F;&#x4E00;&#x7121;&#x4E8C;&#x306E;&#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x304C;&#x4FDD;&#x8A3C;&#x3055;&#x308C;&#x307E;&#x3059;&#x3002;&#x30B7;&#x30EA;&#x30A2;&#x30E9;&#x30A4;&#x30BA;&#x3092;&#x5FF5;&#x982D;&#x306B;&#x7F6E;&#x304F;&#x306A;&#x3089;enum&#x304C;&#x4E00;&#x756A;&#x5B89;&#x5168;&#x3067;&#x3059;&#x3002;&#x5BA3;&#x8A00;&#x3055;&#x308C;&#x305F;&#x5B9A;&#x6570;&#x4EE5;&#x5916;&#x306B;&#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x304C;&#x306A;&#x3044;&#x3053;&#x3068;&#x3092;JVM&#x304C;&#x4FDD;&#x8A3C;&#x3057;&#x307E;&#x3059;&#x3002;\nEffiective Java &#x7B2C;&#x4E8C;&#x7248; &#x9805;&#x76EE;77 &#x300C;&#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x5236;&#x5FA1;&#x306B;&#x5BFE;&#x3057;&#x3066;&#x306F;readResolve&#x3088;&#x308A;enum&#x578B;&#x3092;&#x9078;&#x3076;&#x300D;&#x3067;&#x3059;&#x3002;\n
- &#x30B7;&#x30F3;&#x30B0;&#x30EB;&#x30C8;&#x30F3;&#x3067;&#x3059;&#x306D;&#x3002;Enum&#x306F;Serializable&#x3092;&#x5B9F;&#x88C5;&#x3057;&#x3066;&#x3044;&#x3066;\n
- \n
- &#x9045;&#x5EF6;&#x521D;&#x671F;&#x5316;&#x3059;&#x308B;&#x30B7;&#x30F3;&#x30B0;&#x30EB;&#x30C8;&#x30F3;&#x306E;&#x5178;&#x578B;&#x7684;&#x306A;&#x4F8B;&#x3067;&#x3059;&#x3002;&#x6700;&#x521D;&#x306E;getInstance&#x30E1;&#x30BD;&#x30C3;&#x30C9;&#x306E;&#x547C;&#x3073;&#x51FA;&#x3057;&#x3067;&#x521D;&#x671F;&#x5316;&#x3055;&#x308C;&#x307E;&#x3059;&#x3002;&#x8907;&#x6570;&#x30B9;&#x30EC;&#x30C3;&#x30C9;&#x3067;&#x3053;&#x306E;&#x30E1;&#x30BD;&#x30C3;&#x30C9;&#x3092;&#x547C;&#x3073;&#x51FA;&#x3057;&#x305F;&#x969B;&#x306B;&#x3001;&#x8907;&#x6570;&#x56DE;&#x306E;&#x521D;&#x671F;&#x5316;&#x304C;&#x884C;&#x308F;&#x308C;&#x308B;&#x306E;&#x3092;&#x9632;&#x3050;&#x305F;&#x3081;&#x3068;&#x3001;&#x4ED6;&#x306E;&#x30B9;&#x30EC;&#x30C3;&#x30C9;&#x306B;&#x521D;&#x671F;&#x5316;&#x6E08;&#x307F;&#x3067;&#x3042;&#x308B;&#x3053;&#x3068;&#x3092;&#x4F1D;&#x3048;&#x308B;&#x305F;&#x3081;&#x306B;&#x3001;&#x56FA;&#x6709;&#x30ED;&#x30C3;&#x30AF;&#x3092;&#x304B;&#x3051;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;\n
- &#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x306E;&#x30D5;&#x30A3;&#x30FC;&#x30EB;&#x30C9;&#x3092;&#x5185;&#x90E8;&#x30AF;&#x30E9;&#x30B9;&#x306B;&#x6301;&#x3064;&#x30D1;&#x30BF;&#x30FC;&#x30F3;&#x3067;&#x3059;&#x3002;\n&#x9045;&#x5EF6;&#x521D;&#x671F;&#x5316;&#x30DB;&#x30EB;&#x30C0;&#x30FC;&#x30AF;&#x30E9;&#x30B9;&#x30A4;&#x30C7;&#x30AA;&#x30E0;&#x3068;&#x304B;&#x3044;&#x3044;&#x307E;&#x3059;&#x3002;\ngetInstance&#x30E1;&#x30BD;&#x30C3;&#x30C9;&#x304C;&#x521D;&#x3081;&#x3066;&#x547C;&#x3073;&#x51FA;&#x3055;&#x308C;&#x305F;&#x6642;&#x306B;&#x3001;&#x521D;&#x3081;&#x3066;InstanceHolder.INSTANCE&#x3092;&#x8AAD;&#x307F;&#x51FA;&#x3057;&#x3001;&#x305D;&#x308C;&#x306B;&#x3088;&#x308A;InstanceHolder&#x304C;&#x521D;&#x671F;&#x5316;&#x3055;&#x308C;&#x307E;&#x3059;&#x3002;\n&#x3053;&#x306E;&#x30A4;&#x30C7;&#x30AA;&#x30E0;&#x306E;&#x7F8E;&#x3057;&#x3055;&#x306F;&#x3001;getInstance&#x30E1;&#x30BD;&#x30C3;&#x30C9;&#x306F;&#x540C;&#x671F;&#x3055;&#x308C;&#x3066;&#x304A;&#x3089;&#x305A;&#x3001;&#x30D5;&#x30A3;&#x30FC;&#x30EB;&#x30C9;&#x30A2;&#x30AF;&#x30BB;&#x30B9;&#x3060;&#x3051;&#x3092;&#x884C;&#x3046;&#x3053;&#x3068;&#x3067;&#x3059;&#x3002;&#x3057;&#x305F;&#x304C;&#x3063;&#x3066;&#x3001;&#x9045;&#x5EF6;&#x521D;&#x671F;&#x5316;&#x3067;&#x306F;&#x30A2;&#x30AF;&#x30BB;&#x30B9;&#x306E;&#x30B3;&#x30B9;&#x30C8;&#x304C;&#x5B9F;&#x8CEA;&#x7684;&#x306B;&#x5897;&#x3048;&#x307E;&#x305B;&#x3093;&#x3002;\n&#x6700;&#x65B0;&#x306E;JVM&#x306F;&#x30AF;&#x30E9;&#x30B9;&#x3092;&#x521D;&#x671F;&#x5316;&#x3059;&#x308B;&#x305F;&#x3081;&#x3060;&#x3051;&#x306B;&#x30D5;&#x30A3;&#x30FC;&#x30EB;&#x30C9;&#x3078;&#x306E;&#x30A2;&#x30AF;&#x30BB;&#x30B9;&#x3092;&#x540C;&#x671F;&#x3057;&#x307E;&#x3059;&#x3002;&#x4E00;&#x65E6;&#x3001;&#x30AF;&#x30E9;&#x30B9;&#x304C;&#x521D;&#x671F;&#x5316;&#x3055;&#x308C;&#x308C;&#x3070;&#x3001;&#x305D;&#x306E;&#x5F8C;&#x306E;&#x30D5;&#x30A3;&#x30FC;&#x30EB;&#x30C9;&#x3078;&#x306E;&#x30A2;&#x30AF;&#x30BB;&#x30B9;&#x306B;&#x4F55;&#x3089;&#x304B;&#x306E;&#x691C;&#x67FB;&#x3084;&#x540C;&#x671F;&#x304C;&#x304B;&#x304B;&#x308F;&#x3089;&#x306A;&#x3044;&#x3088;&#x3046;&#x306B;&#x3001;JVM&#x306F;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x4FEE;&#x6B63;&#x3057;&#x307E;&#x3059;&#x3002;\n\n
- &#x3053;&#x308C;&#x306F;&#x3053;&#x3053;&#x3067;&#x5168;&#x90E8;&#x8A71;&#x305B;&#x308B;&#x5185;&#x5BB9;&#x3067;&#x306A;&#x3044;&#x3067;&#x3059;&#x304C;&#x3001;&#x30C0;&#x30D6;&#x30EB;&#x30C1;&#x30A7;&#x30C3;&#x30AD;&#x30F3;&#x30B0;&#x30ED;&#x30B8;&#x30C3;&#x30AF;&#x306E;&#x30D1;&#x30BF;&#x30FC;&#x30F3;&#x3067;&#x3059;&#x3002;Java1.4&#x3067;&#x306F;&#x6B63;&#x3057;&#x304F;&#x52D5;&#x304D;&#x307E;&#x305B;&#x3093;&#x3002;1.5&#x4EE5;&#x964D;&#x3067;&#x3059;&#x3002;&#x56FA;&#x6709;&#x30ED;&#x30C3;&#x30AF;&#x306B;&#x3088;&#x308B;&#x30ED;&#x30C3;&#x30AF;&#x306E;&#x30B3;&#x30B9;&#x30C8;&#x3092;&#x6E1B;&#x3089;&#x3059;&#x306E;&#x304C;&#x76EE;&#x7684;&#x306A;&#x306E;&#x3067;&#x3059;&#x304C;&#x3001;&#x306A;&#x306B;&#x3076;&#x3093;&#x3084;&#x3084;&#x3053;&#x3057;&#x3044;&#x3002;&#x3053;&#x3046;&#x3044;&#x3046;&#x30B3;&#x30FC;&#x30C9;&#x306F;&#x66F8;&#x304F;&#x3079;&#x304D;&#x3067;&#x306A;&#x3044;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;\n(1)&#x3067;&#x30E1;&#x30A4;&#x30F3;&#x30E1;&#x30E2;&#x30EA;&#x304B;&#x3089;&#x6700;&#x65B0;&#x306E;&#x5024;&#x3092;&#x53D6;&#x5F97;&#x3057;&#x307E;&#x3059;&#x3002;\n(2)&#x3067;&#x306F;valotile&#x30D5;&#x30A3;&#x30FC;&#x30EB;&#x30C9;&#x3092;&#x30C1;&#x30A7;&#x30C3;&#x30AF;&#x3057;&#x3066;&#x3044;&#x308B;&#x306E;&#x3067;(3)&#x3067;&#x56FA;&#x6709;&#x30ED;&#x30C3;&#x30AF;&#x3088;&#x308A;&#x30B3;&#x30B9;&#x30C8;&#x304C;&#x4E0B;&#x3055;&#x3052;&#x307E;&#x3059;&#x3002;null&#x306E;&#x5834;&#x5408;&#x306F;(3)&#x3067;&#x56FA;&#x6709;&#x30ED;&#x30C3;&#x30AF;&#x3067;&#x30ED;&#x30C3;&#x30AF;&#x3092;&#x7372;&#x5F97;&#x3002;\n(3)&#x30ED;&#x30C3;&#x30AF;&#x7372;&#x5F97;&#x5F8C;&#x306F;&#x4ED6;&#x306E;&#x30B9;&#x30EC;&#x30C3;&#x30C9;&#x3067;&#x30A2;&#x30F3;&#x30ED;&#x30C3;&#x30AF;&#x524D;&#x306B;&#x767A;&#x751F;&#x3057;&#x305F;&#x5909;&#x66F4;&#x304C;&#x3001;&#x4E8B;&#x524D;&#x767A;&#x751F;(happens-before)&#x306E;&#x4ED5;&#x69D8;&#x3067;&#x6700;&#x65B0;&#x306E;instance&#x304C;&#x898B;&#x3048;&#x308B;&#x3088;&#x3046;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;&#x3002;&#x4ED6;&#x306E;&#x30B9;&#x30EC;&#x30C3;&#x30C9;&#x306B;&#x3088;&#x3063;&#x3066;&#x3001;&#x3059;&#x3067;&#x306B;&#x521D;&#x671F;&#x5316;&#x6E08;&#x307F;&#x3067;&#x3042;&#x308C;&#x3070;&#x3001;&#x30ED;&#x30C3;&#x30AF;&#x3092;&#x89E3;&#x653E;&#x3057;&#x3066;instance&#x3092;&#x8FD4;&#x3059;&#x3002;&#x672A;&#x521D;&#x671F;&#x5316;&#x306A;&#x3089;&#x521D;&#x671F;&#x5316;&#x3057;&#x3066;instance&#x3092;&#x8FD4;&#x3059;&#x3002;&#x56FA;&#x6709;&#x30ED;&#x30C3;&#x30AF;&#x3092;&#x629C;&#x3051;&#x308B;&#x3068;&#x304D;&#x306B;&#x3053;&#x306E;&#x5909;&#x66F4;&#x306F;&#x30E1;&#x30A4;&#x30F3;&#x30E1;&#x30E2;&#x30EA;&#x306B;&#x4F1D;&#x308F;&#x308A;&#x3001;&#x4ED6;&#x306E;&#x30B9;&#x30EC;&#x30C3;&#x30C9;&#x304B;&#x3089;&#x898B;&#x3048;&#x308B;&#x3088;&#x3046;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;&#x3002;\n&#x30FB;&#x3053;&#x3046;&#x3044;&#x3046;&#x30B3;&#x30FC;&#x30C9;&#x306F;&#x7406;&#x89E3;&#x304C;&#x96E3;&#x3057;&#x3044;\n&#x30FB;&#x30E1;&#x30E2;&#x30EA;&#x30E2;&#x30C7;&#x30EB;&#x306B;&#x95A2;&#x4FC2;&#x3059;&#x308B;&#x306E;&#x3067;&#x5384;&#x4ECB;&#x3002;&#x3067;&#x304D;&#x308B;&#x3060;&#x3051;&#x56DE;&#x907F;&#x3057;&#x305F;&#x307B;&#x3046;&#x304C;&#x3044;&#x3044;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;\n
- \n
- \n
- Eager&#x306A;&#x30B7;&#x30F3;&#x30B0;&#x30EB;&#x30C8;&#x30F3;&#x3067;&#x3059;&#x306D;&#x3002;\n