2017年2月20日

單例模式 Singleton

單例模式 Singleton

保證一個類別只有一個物件,而且要提供存取該物件的統一方法

public class FragmentOne extends Fragment {
    private static FragmentOne fragmentOne = null;

    private Singleton(){
    // 建立物件
    }

    public static FragmentOne getInstance() {
 
       if (fragmentOne == null) {
          // 多執行緒時,當物件需要被建立時才使用synchronized保證fragmentOne一定是單一的 ,增加程式校能
           synchronized(FragmentOne.class){
          if (fragmentOne == null) {
            // 第一次被呼叫的時候再建立物件
            fragmentOne = new FragmentOne();
          }
        }
        return fragmentOne;
    }

}



補充

package com.test;

public class TestSingletionPattern {

public static void main(String[] args) {
// TODO Auto-generated method stub
}

}

class Singleton {
private static final Singleton singleton = new Singleton();

private Singleton() {

}

public static Singleton getInstance() {
return singleton;
}

public static void doSomething() {

}
}

class SingletonB {
private static SingletonB singleton = new SingletonB();

private SingletonB() {

}

// 多執行緒時使用synchronized保證Singleton一定是單一的
public static synchronized SingletonB getInstance() {
if (singleton == null) {
singleton = new SingletonB();
}
return singleton;
}

public static void doSomething() {

}
}

class SingletonC {
private static SingletonC singleton = new SingletonC();

private SingletonC() {

}

// 多執行緒時,當物件需要被建立時才使用synchronized保證Singleton一定是單一的 ,增加程式校能
public static SingletonC getInstance() {
if (singleton == null) {
synchronized (SingletonC.class) {
if (singleton == null) {
singleton = new SingletonC();
}
}
}
return singleton;
}

public static void doSomething() {

}
}