Android設(shè)計(jì)模式之單例模式詳解
單例模式
一個類只有一個實(shí)例,并且可以全局訪問使用
應(yīng)用場景
如賬戶管理類,數(shù)據(jù)庫操作類等(某個對象頻繁被訪問使用)
常用方式
餓漢式
懶漢式
同步加鎖
DCL雙重加鎖驗(yàn)證
靜態(tài)內(nèi)部類
枚舉單例
餓漢式
加載類的同時立即進(jìn)行初始化操作,對資源消耗很大
public class SingleTest {
public static final SingleTest singleTest1=new SingleTest();
public SingleTest() {
}
public static SingleTest getSingleTest1(){
return singleTest1;
}
}
懶漢式
優(yōu)點(diǎn):需要使用時候才進(jìn)行初始化加載
缺點(diǎn):線程不安全,在多線程中很容易出現(xiàn)不同步的情況
public class SingleTest1 {
private static SingleTest1 instance=null;
public SingleTest1() {
}
public static SingleTest1 getInstance(){
if(instance==null){
instance=new SingleTest1();
}
return instance;
}
}
同步加鎖
優(yōu)點(diǎn):解決線程安全問題
缺點(diǎn):每次實(shí)例需要判斷加鎖狀態(tài),效率低下
public class SingleTest2 {
private static SingleTest2 instance=null;
public SingleTest2() {
}
public static synchronized SingleTest2 getInstance(){
if(instance==null){
instance=new SingleTest2();
}
return instance;
}
}
DCL雙重校驗(yàn)
優(yōu)點(diǎn):并發(fā)不高的情況下可以完美運(yùn)行(推薦使用,客戶端幾乎不存在高并發(fā)情況)
缺點(diǎn):JDK1.5以前可能會出現(xiàn)instance為初始化的問題(現(xiàn)在的Android幾乎都是1.7 1.8了幾乎可以略率此問題)
public class SingleTest4 {
private static SingleTest4 instance=null;//靜態(tài)變量
public SingleTest4() {
}
public static SingleTest4 getInstance(){
if (instance == null) {//第一層校驗(yàn)
synchronized (SingleTest4.class) {
if (instance == null) {//第二層校驗(yàn)
instance = new SingleTest4();
}
}
}
return instance;
}
}
靜態(tài)內(nèi)部類
優(yōu)點(diǎn):延遲加載,線程安全,內(nèi)存消耗少(推薦使用)
public class SingleTest5 {
private SingleTest5() {
}
public static final SingleTest5 getInstance() {
return SingletonHolder.INSTANCE;
}
//定義的靜態(tài)內(nèi)部類
private static class SingletonHolder {
private static final SingleTest5 INSTANCE = new SingleTest5(); //創(chuàng)建實(shí)例的地方
}
}
枚舉單例
優(yōu)點(diǎn):線程安全,防反序列化,防反射,寫法簡單
public enum SingleTest6 {
//第一種方式
// INSTANCE;
// private CaiPiao instance;
//
// SingleTest6() {
// instance = new CaiPiao();
// }
//
// public CaiPiao getInstance() {
// return instance;
// }
//
// class CaiPiao {
//
// }
//第二種方式
INSTANCE2{
@Override
protected void CaiPiao() {
System.out.println("彩票");
}
};
protected abstract void CaiPiao();
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
利用kotlin實(shí)現(xiàn)一個餅圖實(shí)例代碼
餅狀圖是以不同顏色的圓的切片表示的值。下面這篇文章主要給大家介紹了關(guān)于利用kotlin實(shí)現(xiàn)一個餅圖的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12
RecylerView實(shí)現(xiàn)流布局StaggeredGridLayoutManager使用詳解
這篇文章主要為大家詳細(xì)介紹了RecylerView實(shí)現(xiàn)流布局StaggeredGridLayoutManager使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09
Android開發(fā)實(shí)現(xiàn)SubMenu選項(xiàng)菜單和子菜單示例
這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)SubMenu選項(xiàng)菜單和子菜單,結(jié)合實(shí)例形式分析了Android開發(fā)中SubMenu選項(xiàng)菜單和子菜單的功能、配置、布局等相關(guān)操作技巧,需要的朋友可以參考下2019-03-03
android之計(jì)時器(Chronometer)的使用以及常用的方法
在Android的SDK中,為我們提供了一個計(jì)時器,這個計(jì)時器稱為Chronometer,我們可以成它為Android的一個組件,同時它也具備自己獨(dú)有的方法2013-01-01
Android使用SwipeListView實(shí)現(xiàn)類似QQ的滑動刪除效果
這篇文章主要介紹了Android使用SwipeListView實(shí)現(xiàn)類似QQ的滑動刪除效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08
Android Application存取公共數(shù)據(jù)的實(shí)例詳解
這篇文章主要介紹了Android Application存取公共數(shù)據(jù)的實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-07-07

