用途
通過[單例模式]可以保證系統(tǒng)中一個類只有一個實例而且該實例易于外界訪問,從而方便對實例個數(shù)的控制并節(jié)約系統(tǒng)資源。如果希望在系統(tǒng)中某個類的對象只能存在一個蜻底,單例模式是最好的解決方案束昵。
代碼示例
Android中LocalBroadcastManager的單例寫法
private static final Object mLock = new Object();
private static LocalBroadcastManager mInstance;
@NonNull
public static LocalBroadcastManager getInstance(@NonNull Context context) {
synchronized (mLock) {
if (mInstance == null) {
mInstance = new LocalBroadcastManager(context.getApplicationContext());
}
return mInstance;
}
}
private LocalBroadcastManager(Context context) {
mAppContext = context;
mHandler = new Handler(context.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_EXEC_PENDING_BROADCASTS:
executePendingBroadcasts();
break;
default:
super.handleMessage(msg);
}
}
};
}
網(wǎng)絡(luò)上比較推薦的一種寫法
public class Singleton {
/**
* 類級的內(nèi)部類,也就是靜態(tài)的成員式內(nèi)部類葛峻,該內(nèi)部類的實例與外部類的實例
* 沒有綁定關(guān)系锹雏,而且只有被調(diào)用到才會裝載,從而實現(xiàn)了延遲加載
*/
private static class SingletonHolder{
/**
* 靜態(tài)初始化器术奖,由JVM來保證線程安全
*/
private static Singleton instance = new Singleton();
}
/**
* 私有化構(gòu)造方法
*/
private Singleton(){
}
public static Singleton getInstance(){
return SingletonHolder.instance;
}
}