1. 程式人生 > >單例模式(Singleton)

單例模式(Singleton)

ech 單例模式 bsp 在線 創建 private 解決 餓漢式 dir

1.解決的問題:使得一個類只能夠創建一個對象。2.如何實現: ①私有化構造器,使得在類的外部不能調用該構造器
②在類的內部創建一個實例
③私有化該對象,通過公共的方法來調用(返回該對象) ④由於需要在類外部調用該方法(外部不能實例化該類對象),所以把該方法設置為static以便在類外部通過類名直接調用該方法,同時這個實例也應設置成靜態(靜態方法不能調用非靜態的對象返回)
餓漢式
  1. public class TestSingleton {
  2. public static void main(String[] args) {
  3. Singleton s1 = Singleton.getSingleton
    ();
  4. Singleton s2 = Singleton.getSingleton();
  5. System.out.println(s1 == s2);// true
  6. }
  7. }
  8. class Singleton {
  9. private static Singleton s = new Singleton();
  10. private Singleton() {
  11. }
  12. public static Singleton getSingleton() {
  13. return s;
  14. }
  15. }

懶漢式 (延遲創建)可能存在線程安全問題,參見互斥鎖
  1. public class TestSingleton1 {
  2. public static void
    main(String[] args) {
  3. Singleton1 s1 = Singleton1.getSingleton();
  4. Singleton1 s2 = Singleton1.getSingleton();
  5. System.out.println(s1 == s2);// true
  6. for (int i = 0; i < args.length; i++) {
  7. System.out.println(args[i]);
  8. }
  9. }
  10. }
  11. class Singleton1 {
  12. private static Singleton1 s = null;
  13. private Singleton1()
    {
  14. }
  15. public static Singleton1 getSingleton() {
  16. if (s == null) {
  17. s = new Singleton1();
  18. }
  19. return s;
  20. }
  21. }

更深的討論: http://www.barryzhang.com/archives/521

單例模式(Singleton)