欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android設(shè)計(jì)模式之單例模式詳解

 更新時(shí)間:2017年08月18日 15:03:47   作者:Allure丶  
這篇文章主要為大家詳細(xì)介紹了Android設(shè)計(jì)模式之單例模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

單例模式

一個(gè)類只有一個(gè)實(shí)例,并且可以全局訪問(wèn)使用

應(yīng)用場(chǎng)景

如賬戶管理類,數(shù)據(jù)庫(kù)操作類等(某個(gè)對(duì)象頻繁被訪問(wèn)使用)

常用方式

餓漢式
懶漢式
同步加鎖
DCL雙重加鎖驗(yàn)證
靜態(tài)內(nèi)部類
枚舉單例
餓漢式

加載類的同時(shí)立即進(jìn)行初始化操作,對(duì)資源消耗很大

public class SingleTest {
  public static final SingleTest singleTest1=new SingleTest();

  public SingleTest() {
  }
  public static SingleTest getSingleTest1(){

    return singleTest1;
  }
}

懶漢式

優(yōu)點(diǎn):需要使用時(shí)候才進(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):解決線程安全問(wè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以前可能會(huì)出現(xiàn)instance為初始化的問(wèn)題(現(xiàn)在的Android幾乎都是1.7 1.8了幾乎可以略率此問(wèn)題)

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):線程安全,防反序列化,防反射,寫(xiě)法簡(jiǎ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();
}

github代碼地址

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 總結(jié)Android App內(nèi)存優(yōu)化之圖片優(yōu)化

    總結(jié)Android App內(nèi)存優(yōu)化之圖片優(yōu)化

    網(wǎng)上有很多大拿分享的關(guān)于Android性能優(yōu)化的文章,主要是通過(guò)各種工具分析,使用合理的技巧優(yōu)化APP的體驗(yàn),提升APP的流暢度,但關(guān)于內(nèi)存優(yōu)化的文章很少有看到。下面是我在實(shí)踐過(guò)程中使用的一些方法,很多都是不太成熟的項(xiàng)目,只是將其作為一種處理方式分享給大家。
    2016-08-08
  • Android 如何實(shí)現(xiàn)exclude aar包中的某個(gè)jar包

    Android 如何實(shí)現(xiàn)exclude aar包中的某個(gè)jar包

    這篇文章主要介紹了Android 如何實(shí)現(xiàn)exclude aar包中的某個(gè)jar包,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • Android實(shí)現(xiàn)儀表盤(pán)控件開(kāi)發(fā)

    Android實(shí)現(xiàn)儀表盤(pán)控件開(kāi)發(fā)

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)儀表盤(pán)控件開(kāi)發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Android系統(tǒng)狀態(tài)欄定制圖標(biāo)顯示邏輯控制

    Android系統(tǒng)狀態(tài)欄定制圖標(biāo)顯示邏輯控制

    這篇文章主要為大家介紹了Android系統(tǒng)狀態(tài)欄定制圖標(biāo)顯示邏輯控制,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Android圓形旋轉(zhuǎn)菜單開(kāi)發(fā)實(shí)例

    Android圓形旋轉(zhuǎn)菜單開(kāi)發(fā)實(shí)例

    本文給大家分享一個(gè)動(dòng)畫(huà)菜單,基于android開(kāi)發(fā)圓形旋轉(zhuǎn)菜單案例,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-09-09
  • Activity取消界面切換的默認(rèn)動(dòng)畫(huà)方法(推薦)

    Activity取消界面切換的默認(rèn)動(dòng)畫(huà)方法(推薦)

    下面小編就為大家?guī)?lái)一篇Activity取消界面切換的默認(rèn)動(dòng)畫(huà)方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • 關(guān)于RxJava的一些特殊用法小結(jié)

    關(guān)于RxJava的一些特殊用法小結(jié)

    RxJava 是一個(gè)響應(yīng)式編程框架,采用觀察者設(shè)計(jì)模式。下面這篇文章主要總結(jié)介紹了一些關(guān)于RxJava的特殊用法,需要的朋友可以參考借鑒,下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。
    2017-05-05
  • Android圖片壓縮幾種方式總結(jié)

    Android圖片壓縮幾種方式總結(jié)

    這篇文章主要介紹了Android圖片壓縮幾種方式總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Android編程實(shí)現(xiàn)圖片拍照剪裁的方法

    Android編程實(shí)現(xiàn)圖片拍照剪裁的方法

    這篇文章主要介紹了Android編程實(shí)現(xiàn)圖片拍照剪裁的方法,涉及Android調(diào)用裁剪工具操作圖片的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-12-12
  • Android webview 遇到android.os.FileUriExposedException錯(cuò)誤解決辦法

    Android webview 遇到android.os.FileUriExposedException錯(cuò)誤解決辦法

    這篇文章主要介紹了Android webview 遇到android.os.FileUriExposedException錯(cuò)誤解決辦法的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家遇到這樣的問(wèn)題解決,需要的朋友可以參考下
    2017-10-10

最新評(píng)論