最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡單講解在Java編程中實(shí)現(xiàn)設(shè)計(jì)模式中的單例模式結(jié)構(gòu)

 更新時(shí)間:2016年04月22日 09:32:13   作者:匆忙擁擠repeat  
這篇文章主要介紹了簡單講解在Java編程中實(shí)現(xiàn)設(shè)計(jì)模式中的單例模式結(jié)構(gòu),設(shè)計(jì)模式是最基本直白簡單的一種設(shè)計(jì)模式,需要的朋友可以參考下

1. 模式介紹

模式的定義

確保某一個(gè)類只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。

模式的使用場景

確保某個(gè)類有且只有一個(gè)對象的場景,例如創(chuàng)建一個(gè)對象需要消耗的資源過多,如要訪問 IO 和數(shù)據(jù)庫等資源。

2. UML類圖

201642293056020.png (600×189)

角色介紹:
(1)Client : 高層客戶端。
(2)Singleton : 單例類。

3. 模式的簡單實(shí)現(xiàn)

public class Singleton { 
  private static Singleton intance; 
  private Singleton() {} 
   
  public static Singleton getInstance() { 
    /* 
     * 一開始多線程進(jìn)來,遇到鎖,一個(gè)線程進(jìn)去,是為空,new對象; 后續(xù)線程進(jìn)入,不為空,不操作;最后直接返回 
     * 對象不為空,再有多個(gè)線程進(jìn)入該函數(shù),不為空,不執(zhí)行加鎖操作,直接返回 
     */ 
    if (intance == null) { 
      synchronized (Singleton.class) { 
        if (intance == null) { 
          intance = new Singleton(); 
        } 
      } 
    } 
    return intance; 
  } 
} 
 
class Singleton1 {// 懶漢式  
  private static Singleton1 intance = new Singleton1();//懶的,程序運(yùn)行的時(shí)候就加載出來了 
  private Singleton1() {} 
   
  public static Singleton1 getInstance() { 
    return intance; 
  } 
} 
 
class Singleton2 {// 餓漢式 
  private static Singleton2 intance; 
  private Singleton2() {} 
   
  public static Singleton2 getInstance() {//用到的時(shí)候 才加載 
    if (intance == null) { 
      intance = new Singleton2(); 
    } 
    return intance; 
  } 
} 
 
class Singleton3 {// 餓漢式 線程安全 
  private static Singleton3 intance; 
  private Singleton3() {} 
   
  public synchronized static Singleton3 getInstance() {//用到的時(shí)候 才加載, 加鎖 多線程調(diào)用,都有一個(gè)加鎖的動(dòng)作 
    if (intance == null) { 
      intance = new Singleton3(); 
    } 
    return intance; 
  } 
} 
 
class Singleton4 {// 餓漢式 線程安全 
  private static Singleton4 intance; 
  private Singleton4() {} 
   
  public static Singleton4 getInstance() {//用到的時(shí)候 才加載 
    synchronized (Singleton4.class) {// 加鎖 效率跟3差不多 
      if (intance == null) { 
        intance = new Singleton4(); 
      } 
    } 
    return intance; 
  } 
} 

4.優(yōu)點(diǎn)與缺點(diǎn)

(1)優(yōu)點(diǎn):

A.由于單例模式在內(nèi)存中只有一個(gè)實(shí)例,減少了內(nèi)存開支,特別是一個(gè)對象需要頻繁地創(chuàng)建、銷毀時(shí),而且創(chuàng)建或銷毀時(shí)性能又無法優(yōu)化,單例模式的優(yōu)勢就非常明顯。
B.由于單例模式只生成一個(gè)實(shí)例,所以減少了系統(tǒng)的性能開銷,當(dāng)一個(gè)對象的產(chǎn)生需要比較多的資源時(shí),如讀取配置、產(chǎn)生其他依賴對象時(shí),則可以通過在應(yīng)用啟動(dòng)時(shí)直接產(chǎn)生一個(gè)單例對象,然后用永久駐留內(nèi)存的方式來解決;
C.單例模式可以避免對資源的多重占用,例如一個(gè)寫文件動(dòng)作,由于只有一個(gè)實(shí)例存在內(nèi)存中,避免對同一個(gè)資源文件的同時(shí)寫操作。
D.單例模式可以在系統(tǒng)設(shè)置全局的訪問點(diǎn),優(yōu)化和共享資源訪問,例如可以設(shè)計(jì)一個(gè)單例類,負(fù)責(zé)所有數(shù)據(jù)表的映射處理。

(2)缺點(diǎn)
A.單例模式一般沒有接口,擴(kuò)展很困難,若要擴(kuò)展,除了修改代碼基本上沒有第二種途徑可以實(shí)現(xiàn)。

相關(guān)文章

  • SpringCloud Feign遠(yuǎn)程調(diào)用實(shí)現(xiàn)詳解

    SpringCloud Feign遠(yuǎn)程調(diào)用實(shí)現(xiàn)詳解

    Feign是Netflix公司開發(fā)的一個(gè)聲明式的REST調(diào)用客戶端; Ribbon負(fù)載均衡、 Hystrⅸ服務(wù)熔斷是我們Spring Cloud中進(jìn)行微服務(wù)開發(fā)非?;A(chǔ)的組件,在使用的過程中我們也發(fā)現(xiàn)它們一般都是同時(shí)出現(xiàn)的,而且配置也都非常相似
    2022-11-11
  • Spring Boot 集成Mybatis實(shí)現(xiàn)主從(多數(shù)據(jù)源)分離方案示例

    Spring Boot 集成Mybatis實(shí)現(xiàn)主從(多數(shù)據(jù)源)分離方案示例

    本篇文章主要介紹了Spring Boot 集成Mybatis實(shí)現(xiàn)主從(多數(shù)據(jù)源)分離方案實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-03-03
  • 項(xiàng)目管理利器-Maven(Windows安裝)圖文教程

    項(xiàng)目管理利器-Maven(Windows安裝)圖文教程

    下面小編就為大家?guī)硪黄?xiàng)目管理利器-Maven(Windows安裝)圖文教程。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • Java簡明解讀代碼塊的應(yīng)用

    Java簡明解讀代碼塊的應(yīng)用

    所謂代碼塊是指用"{}"括起來的一段代碼,根據(jù)其位置和聲明的不同,可以分為普通代碼塊、構(gòu)造塊、靜態(tài)塊、和同步代碼塊。如果在代碼塊前加上 synchronized關(guān)鍵字,則此代碼塊就成為同步代碼塊
    2022-07-07
  • Java利用字符流輕松處理文本數(shù)據(jù)

    Java利用字符流輕松處理文本數(shù)據(jù)

    在Java中,文本數(shù)據(jù)是經(jīng)常處理的一種數(shù)據(jù)類型,而字符流就是用來處理文本數(shù)據(jù)的一種流,下面就為大家介紹一下Java字符流的基本概念、常用類和方法,以及如何使用字符流來讀寫文件吧
    2023-09-09
  • SpringBoot注冊第三方Bean的方法總結(jié)

    SpringBoot注冊第三方Bean的方法總結(jié)

    眾所周知,SpringBoot默認(rèn)會掃描啟動(dòng)類所在的包及其子包,一般我們都是在需要的類上通過注解的方式去將Bean注冊交給IOC進(jìn)行管理,但是注冊第三方Bean的方案卻不支持,所以本文給大家介紹了SpringBoot注冊第三方Bean的方法,需要的朋友可以參考下
    2024-01-01
  • Java基礎(chǔ)Map集合詳析

    Java基礎(chǔ)Map集合詳析

    這篇文章主要介紹了Java基礎(chǔ)Map集合詳析,主要通過介紹Map集合的常用方法、Map的獲取方法的一些相關(guān)資料展開內(nèi)容,需要的小伙伴可以參考一下
    2022-04-04
  • 一文詳解Java中的原子操作

    一文詳解Java中的原子操作

    在Java中,原子操作尤為重要,尤其是在多線程環(huán)境中,想象一下,如果小黑在操作一個(gè)共享變量時(shí),這個(gè)操作被其他線程打斷,那會發(fā)生什么?可能會導(dǎo)致數(shù)據(jù)不一致,或者更糟糕的情況,本文將給大家詳細(xì)介紹一下Java中的原子操作
    2024-01-01
  • Java實(shí)現(xiàn)十秒向MySQL插入百萬條數(shù)據(jù)

    Java實(shí)現(xiàn)十秒向MySQL插入百萬條數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)十秒向MySQL插入百萬條數(shù)據(jù),文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定借鑒價(jià)值,需要的可以參考一下
    2022-11-11
  • 舉例講解Java中synchronized關(guān)鍵字的用法

    舉例講解Java中synchronized關(guān)鍵字的用法

    這篇文章主要介紹了Java中synchronized關(guān)鍵字的用法,針對synchronized修飾方法的使用作出了簡單講解和演示,需要的朋友可以參考下
    2016-04-04

最新評論

新竹县| 阿拉尔市| 长海县| 防城港市| 山阳县| 武宣县| 紫金县| 昌邑市| 广安市| 宜州市| 宜州市| 洛隆县| 海口市| 九台市| 四子王旗| 伊吾县| 横峰县| 龙井市| 吉林省| 西城区| 长子县| 咸宁市| 雷波县| 天门市| 贵港市| 额济纳旗| 安塞县| 辽宁省| 浮山县| 丽水市| 松江区| 万宁市| 晋城| 江川县| 博乐市| 嘉善县| 塘沽区| 商城县| 砀山县| 万安县| 大同县|