ืืืืจ ืื ืคืื ื ืืื ืื ืฉื ืชืงื ืืคืขื ืืจืืฉืื ื ืืืืฉื ืืคืืกื ืขืืฆืื, ืฉืืข ืืช ืืืืฉื
singleton ืื ืืืฉื ืืืืฉืื ืืช ืืคืืก ืืกืื ืืืืื ืืื ืื ืืืื ืื ืงืืจื. ืืจืื ืืื! ืชืืืืื CodeGym ื ืชืงืืื ืืืคืืกื ืขืืฆืื ืืคืขื ืืจืืฉืื ื ืืจืื 15, ืืืฉืจ ืืงืคืื ืืืงืฉ ืืื ืืืคืชืืข "ืืืืง" ืืช ืืื ืชื ืขื ืืื ืืืฉืื ืืคืืก Java Singleton ืขื ืืืฉืื ืขืฆืื. ืืกืืืื ืืื ืฉืฉืืืขืื ืขื ืืคืืก
ืืกืื ืืืืื ืืคืขื ืืจืืฉืื ื ืืฉ ืืจืื ืฉืืืืช: ืื ืื ืืืื ืืคืืก ืขืืฆืืื? ืืื ืื ืื ื ืฆืจืืืื ืืช ืื? ืื ืื
ืกืื ืืืืื ? ืืืืกืืฃ, ืืื ืืืฉืื ืขืฆืื? ืืืื ื ืขื ื ืขื ืืฉืืืืช ืืืื ืืคื ืืกืืจ.
ืื ืื ืืืื ืืคืืก ืขืืฆืืื? ืื ื ืืืืื ืฉืืขื ืืืกืืืจืื ื ืืขืื ืืขื ืืช ืขื ืฉืืื ืื ืืืื ื ืืืืื ืืืืชืจ. ืืฉื ื ืืจืืขื ืืืืจื ืชืื ืืช ืืคืืจืกืืื (ืืจืื ืืื, ื'ืื ืืืืกืืืืก, ืจืืืฃ ื'ืื ืกืื ืืจืืฆ'ืจื ืืื) ืฉืืขืื ืจืขืืื ืืขื ืืื. ืื ืฉืื ืื ืฉืืขืชืื ืงืจืืืืช ืคืืชืื ืชืืื ื ืืืืื ืืืชื ืืคืชืืจ ืืช ืืืชื ืืขืืืช ืืขืจื ืืืืชืื ืงืื ืืืื ื ืืืืชื ืืืคื. ืื ืื ืืืืืื ืืชืืจ ืืคืืกืื ืืืคืืกืืื ืฉืืขืืชืื ืงืจืืืืช ืฆืจืื ืืืฉืชืืฉ ืืื ืืชืื ืืช ืืื ืื ืขืฆืืื. ืกืคืจื ืคืืจืกื ืืฉื ืช 1994 ืชืืช ืืืืชืจืช Design Patterns: Elements of Reusable Object-Oriented Software. ืืฉื ืฉื ืืกืคืจ ืืชืืจืจ ืืืจืื ืืื ืืื ืฉืื ืืชืืืื ืืงืจืื ืื ืคืฉืื ืืกืคืจ ืฉื ืื ืืคืืืช ืืืจืืขื. ืืืืืืจื ืืจืืฉืื ื ืืืื 23 ืืคืืกืื. ืืืืจ ืืื, ืืชืืื ืขืฉืจืืช ืืคืืกืื ืืืจืื. ืื ืืื ื ืกืื ืืช ืืชืฉืืื ืืฉืืื ืฉื ืืคืกืงื ืืื (ืืื ืืืื ืืคืืกื ืขืืฆืื?) ืืืื ืืืืื:
ืชืื ืืช ืขืืฆืื ืืื ืคืชืจืื ืกืื ืืจืื ืืืขืื ื ืคืืฆื.
ืืืคืืก
ืืกืื ืืืืื ืืื ืจืง ืืื ืืื.
ืืื ืื ืื ื ืฆืจืืืื ืืคืืกื ืขืืฆืื? ืืชื ืืืื ืืชืื ืช ืืื ืืืขืช ืืคืืกืื: ืืืจื ืืื, ืขื ืจืื 15, ืืืจ ืืชืืช ืืืืช ืืื ื ืชืืื ืืืช ื-CodeGym ืืื ืืืขืช ืืืื ืฉืื ืงืืืืืช. ืื ืืฆืืืข ืขื ืื ืฉืืคืืกื ืขืืฆืื ืื ืกืื ืฉื ืืื ืฉืืฉืืืืฉ ืื ืืืืื ืืช ืืืืกืืจ ืืืืืื: ืืคืืกื ืขืืฆืื ืืชืืจืื ืืืฆื ืืคืชืืจ ืืขืื ืืืคืืกืืช ืืฆืืจื ื ืืื ื. ืืืฉืืขืืช ืืื ืฉืืืจืช ืืคืืกืื ืืืกืืช ืื ืืื. ืืืจื ืื, ืื ืืืืื ืืืืืืจืืชืืื. ืืืืืื, ืืชื ืืืื ืืืฆืืจ ืืืืืจืืชื ืืืื ืืฉืื
ืขื ืืืืง ื'ืง ืืืกืคืจืื ืืืืงืืืฉ ืืื ืจื ืืื, ืื ืฉืืชื ืืืื ืืืืฉื ืืื ืฉืืืื ืืชืืืจ ืืืฉื ืืื ืจื. ืืืชื ืืืืจ ื ืืื ืขื ืืคืืกื ืขืืฆืื. ืื ืืกืฃ, ืขื ืืคืืกื ืขืืฆืื, ืืงืื ืืืคื ืืกืื ืืจืื ืืืชืจ, ืืืืฉืจ ืืฉืชืืฉืื ืืืคืืก ืืืชืืื, ืืฉ ืคืืืช ืกืืืื ืฉืชืขืฉื ืืขืืืืช, ืืืืืื ืฉืืืืืืืืช ืื ืคืืฆืืช ืฉื ืืืคืืก ืืืื ืืืืกืจื ืืคื ื ืืื ืจื. ืื ืืกืฃ ืืื ืืฉืืจ, ืืืจืช ืืคืืกืื ืขืืืจืช ืืืชืื ืชืื ืืืืื ืื ืืช ืื ืืื ืืืชืจ. ืืชื ืืืื ืคืฉืื ืืืืจ ืืช ืฉื ืืชืื ืืช ืืืงืื ืื ืกืืช ืืกืคืง ืืกืืจ ืืจืื ืืขืืืชืื ืืืชืื ืชืื. ืืกืืืื, ืืคืืกื ืขืืฆืื ืขืืืจืื ืื:
ืื ืืืืฆืื ืืช ืืืืื ืืืืฉ, ืืื ืืืฉืชืืฉ ืืคืชืจืื ืืช ืกืื ืืจืืืื;
ืชืงื ืงืื;
ืกืื ืืจืืืืฆืื ืฉื ืืจืืื ืืืืืื;
ืืกืืื ืกืขืืฃ ืื, ื ืฆืืื ืฉื ืืชื ืืืืง ืืช ืื ืืืฃ ืืคืืกื ืืขืืฆืื ืืฉืืืฉ ืงืืืฆืืช ืืืืืืช:
ืืืกืืฃ, ืืคืืก ืืกืื ืืืืื ืกืื ืืืืื ืืื
ืืคืืก ืืฆืืจืชื . ืืคืืก ืื ืืืืื ืฉืืฉ ืจืง ืืืคืข ืืื ืฉื ืืืืงื ืืืกืคืง ื ืงืืืช ืืืฉื ืืืืืืืช ืืืืืืืงื ืื. ืืืชืืืืจ, ืฆืจืื ืืืืืช ืืจืืจ ืฉืืฉ ืืืืฉื ืืคืืก ืื ืืฉื ื ืืงืจืื:
ืืืฉืจ ืืชืืื ืืช ืฉืื ืืืจืฉืช ืฉืื ืืืืืฆืจ ืืืชืจ ืืืืืืืงื ืืื ืืืืืงื ืืกืืืืช. ืืืืืื, ืืืฉืืง ืืืฉื ืขืฉืื ืืืืืช ืืืืงื Hero ืืจืง ืืืืืืงื Hero ืืื ืฉืืชืืจ ืืช ืืืืืืจ ืืืืื ืืืฉืืง.
ืืืฉืจ ืืชื ืฆืจืื ืืกืคืง ื ืงืืื ืืืืฉื ืืืืืืืช ืืืืืืืงื. ืืืืืื ืืืจืืช, ืขืืื ืืืคืื ืืช ืืืืืืืงื ืืืืื ืืื ืืงืื ืืชืืื ืืช. ืืืจืื ืืฆืขืจ, ืื ืื ืืกืคืืง ืคืฉืื ืืืฆืืจ ืืฉืชื ื ืืืืืื, ืืืืืื ืฉืืื ืืื ื ืืืื ืืชืืื: ืื ืืื ืืืื ืืฉื ืืช ืืช ืขืจื ืืืฉืชื ื, ืื ืฉื ืงืืืช ืืืืฉื ืืืืืืืืช ืฉื ืืืืืืืงื ืขืืืื ืืืืช ืืืืืื. ืืืคืืื ืื ืืื ืฉื Singleton ื ืืืฆืื, ืืืฉื, ืืืฉืจ ืืฉ ืื ืืืืืืงื ืฉืขืืื ืขื ืืกื ื ืชืื ืื, ืืืชื ืฆืจืื ืืืฉืช ืืืกื ืื ืชืื ืื ืืืืงืื ืฉืื ืื ืฉื ืืชืืื ืืช. Singleton ืืืืื ืฉืืฃ ืืื ืื ืืืชืื ืงืื ืฉืืืืืฃ ืืช ืืืืคืข ืฉื ืืฆืจ ืงืืื ืืื .
ืื
ืกืื ืืืืื ืกืืคืง ืืช ืฉื ื ืืฆืจืืื ืืืื: ืืืื ืืืืืช ืจืง ืืื ืืกืื ืืกืืื ืฉื ืืืืืืงื ืืชืืื ืืช ืืืืืืช ืืืืืช ืืืฉื ืืืืืืืช ืืืื. ืืืืืื ืืจืื 15, ืืงืคืื ืืืงืฉ ืืื ืืืืฉื ืืช ืืืคืืก ืืื ืขืืืจ ืืืฉืืื ืืืื:
ืืฆื ืืืืื ืืกืื ืืืืื ืขื ืืชืืื ืขืฆืื.
ืฆืืจ ืฉืืืฉื ืืืืงืืช ืืืื - ืฉืืฉ, ืืจื, ืืืืจ ืืืจืฅ - ืืงืืฆืื ื ืคืจืืื ืชืื ืฉืืืืฉ ืืืืชื ืขืืงืจืื.
ืืืืฉืืืืื ืืืช ืืืฉืง ืืืืชืืช ืฉืืฉ , ืืจื ืืืืืจ ืืืจืฅ .
ืืืืืง ืกืืื ืฉื ืืืืืงื Solution ืงืจื ืืชreadKeyFromConsoleAndInitPlanet ืฉืืื.
ืืืฉื ืืชreadKeyFromConsoleAndInitPlanet ืคืื ืงืฆืืื ืืืืช ืืฉืืื:
5.1. ืงืจื ืคืจืืืจ ืืืจืืืช ืืื ืืืืกืืฃ
5.2. ืื ืืคืจืืืจ ืฉืืื ืืืื ืื-ืืืื ืืืช ืืงืืืขืื ืฉื ืืืืฉืง, ืฆืืจ ืืช ืืืืืืงื ื-Planet ืืชืืื .
ืืืืจ ืฉืงืจืื ื ืืงืคืืื ืืช ืชื ืื ืืืฉืืื, ืื ื ืืืืืื ืืจืืืช ืืืืจืืจ ืืืืข ืืฉ ืฆืืจื
ืืกืื ืืืืื ืืื. ืืืื, ืื ื ืืชืืงืฉืื ืืืฆืืจ ืืืคืข ืฉื ืื ืืืช ืืืืืืงืืช ืืืืืช:
ืฉืืฉ ,
ืืจื ,
ืืืืจ ืืืจืฅ . ืืืืื ื ืืื ืื ืฉืขืืื ื ืืืฆืืจ ืื ืืืชืจ ืืฉืืฉ/ืืจื/ืืืืจ ืืืจืฅ ืืื. ืืืจืช, ืื ืื ื ื ืงืืขืื ืืืฆื ืืืกืืจืื, ืืื ืื ืืืืื ืืชื ืืืชื ืืช ืืืจืกื ืฉืื ืืืืืืช ืืืืืืื. ืืืืขืช ืืคืืก
ืืกืื ืืืืื ื-Java ืืฉืืืฉื ืฉืืืื ื-Java, ืื ื ืืชื ืืืืฉื ืืชื ืืืืช Singleton ืืืืฆืขืืช ืื ืื ืจืืื, ืืืืืื ืฉืื ืื ืชืืื ืืืืืจ ืืืืืืงื ืืืฉ. ืืื, ืื ืืืืืขืืช ืฉื
Singleton ืืกืชืืืช ืืืกืชืจืช ืืงืื ืกืืจืืงืืืจ, ืืฆืืจืช ืฉืืื ืกืืืืช ืฆืืืืจืืช ืืฉืืืืช ืืืืื ืฉื ืืืืืืงื ืืกืื ืืืืื, ื"ืืฉืืืช" ืื ืืืืืืืงืืื ืืืืฉืื ืฉืืืคืืขื. ืื ื ืืืฉืื ื-
Singleton , ืขืืื ืืืฆืืจ ืืืืืืงื ืืืฉ (ืื ืืื ืื ืงืืื ืืืจ ืืชืืื ืืช), ืื ืืืืืืจ ืืืืืืงื ืงืืื. ืืืฉืื ืืช ืื:
ืืชื ืฆืจืื ืืชืช ืืืืืงื ืฉืื ืกืืื ืคืจืื ืืืืืกื ืืืืืืงื ืืืื:
public class LazyInitializedSingleton {
private static LazyInitializedSingleton instance;
}
ืืคืื ืืช ืืื ืื (ืืจืืจืช ืืืืื) ืืคืจืื. ืืืฉืืขืืช ืืื ืฉืื ื ืืชื ืืืฉืช ืืืื ืืืืฅ ืืืืืงื ืืื ืชืืื ืืืืืืจ ืืืืืืงืืื ืืืฉืื:
public class LazyInitializedSingleton {
private static LazyInitializedSingleton instance;
private LazyInitializedSingleton ( ) { }
}
ืืืจืื ืขื ืฉืืืช ืืฆืืจื ืกืืืืช ืฉืชืฉืืฉ ืืงืืืช ืืกืื ืืืืื:
public class LazyInitializedSingleton {
private static LazyInitializedSingleton instance;
private LazyInitializedSingleton ( ) { }
public static LazyInitializedSingleton getInstance ( ) {
if ( instance == null ) {
instance = new LazyInitializedSingleton ( ) ;
}
return instance;
}
}
ืืืืืื ืืขืื ืืื ืืขื ืืืืฉืืช, ืืืืืื ืฉืื ื ืคืฉืื ืืกืชืืจืื ืืช ืืื ืื ืืืกืคืงืื ืฉืืื ืืฉืื ื ืืืงืื ืื ืื ืกืื ืืจืื. ืืืืืื ืฉืืืืจ ืื ื ืืขื ืืืืืื ืฉืชืืืืื CodeGym ืืืืื ืืืืข ืขื ืืคืืก ืื (ืืืคืืกื ืขืืฆืื ืืืื), ืื ืืืื ืกืื ืฉื ืืืฉืืื ืืืื ืืืจืืืื ืืืชืจ ืื ืืชืืืจื ืืื. ื ืฆืืื ืจืง ืื ืืืชืื ืืืืจืืืืช ืืชืืื ืืช, ืืืชืื ืฉืืืื ืฆืืจื ืืฉืืื ืขืื ืืืชืจ ืืคืืก ืื. ืืืืืื, ืืกืืืืช ืจืืืื ืืืืื (ืจืื ืืืืจืื ืขื ืฉืจืฉืืจืื), ืืกืคืจ ืฉืจืฉืืจืื ืฉืื ืื ืขืฉืืืื ืืืฉืช ืืฉืืืช ืืกืื ืืืืื ืื-ืืื ืืช, ืืืงืื ืืืชืืืจ ืืขืื ืืคืกืืง ืืขืืื, ืืืืืื ืฉืื ืฉืจืฉืืจ ื ืคืจื ืืืื ืืืฆืืจ ืืืคืข ืฉื ืืืืืงื. ืืชืืฆืื ืืื, ืขืืืื ืงืืืืืช ืืกืคืจ ืืืฉืืช ืฉืื ืืช ืืืฆืืจืช ืกืื ืืืื ืื ืืชืืืืื ืืืืืืืช ืืื. ืืื ืื ืืืจ ืกืืคืืจ ืืืจ =)
ืืืืกืืฃ... ืื ืื ืืืชืืื ืืขืฆื ืืื ืฉืขืืื ืฉืื ืืงืคืื? ืืชืืื ืขืฆืื ื ืงืจื ืื ืืชืืื ืืืื. ืืื ืืจืืง ืชืื ืืช ืฉืื ืคืขืืื ืขืชืืจืช ืืฉืืืื (ืืืฆืืจืช ืืืืืืงื ืืื ืคืขืืื ืขืชืืจืช ืืฉืืืื) ืืชืืฆืขืช ืขื ืคื ืืจืืฉื ืืื ืืจืืฉ. ืื ืื ืืขืฆื ืงืืจื ืืงืื ื-
Singleton Java ืฉืื ื? ืืืืืื ืืืจืืช, ืืืืืืืงื ืฉืื ื ื ืืฆืจ ืืืื ืืืืฉื ืืืื, ืื ืืจืืฉ. ืืชื ืื ืฆืจืื ืืื ืื ืฉืืชืืื ืขืฆืื ืงืฉืืจ ืืืืฉืื ืืฆืืจื ื ืืงืฉื ืืชืื ืืช
ืืกืื ืืืืื . ืืชืืื ืขืฆืื ืืฉืืฉ ืื ืืืคืืกื ืขืืฆืื ืืฆืืจืชืืื ืืืจืื, ืืื Proxy ื-Factory Method, ืืื ืื ืื ืกืืคืืจ ืืืจ =)
GO TO FULL VERSION