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

java設(shè)計模式之單例模式解析

 更新時間:2017年09月05日 10:36:16   作者:firs大風(fēng)吹  
這篇文章主要為大家詳細(xì)介紹了java設(shè)計模式之單例模式的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

單例模式是最簡單但同時也是很重要的一種設(shè)計模式,優(yōu)點有以下幾個方面:

1.當(dāng)內(nèi)存占用特別大的類需要頻繁地創(chuàng)建銷毀時,單例模式可以節(jié)省內(nèi)存和提高性能,例如myBatis里面的sessionFactory

2.當(dāng)需要對文件做單一讀寫時,例如同一時間只能同時寫入一個windows文本文件,則需要用單例來避免多重讀寫

缺點是:

1.單例模式?jīng)]有接口,很難對其進行拓展。

2.不利于測試,沒辦法直接根據(jù)接口mock出一個對象出來測試

最后說下其實現(xiàn)方式主要有餓漢模式和懶漢模式。其中懶漢模式又可以細(xì)分為幾種,后面再說。

餓漢模式代碼:

 public Class Singleton{
 //在類加載時便實例化自身,餓漢模式
  private static Class Singletom instance = new Singleton();
  private Singleton(){};
  
  public getInstance(){
   return this.instance 
  }
 } 

懶漢模式且線程安全代碼1

public Class Singleton{
  private static Class Singletom instance = null;
  private Singleton(){};
  
  public static Singleton getInstance(){
   if(instance==null){
   //雙重檢測鎖定懶漢模式,如果是直接在getInsance上加鎖,因為有99%的情況是線程安全的,會增加性能消耗,故才有雙重檢測鎖定,優(yōu)化鎖,讓鎖只在1%的情況才執(zhí)行 
   synchronized (Singleton.class) {

if (singleton == null) 
{ 
    singleton = new Singleton(); 
    } 
    } 
   return this.instance 
  } 
}

懶漢模式且線程安全代碼2

public Class Singleton{
  //靜態(tài)內(nèi)部類的方式,應(yīng)該是因為classLoader的機制使得內(nèi)部類不會在類  
  //裝載時便實例化,所以可行
  private static Class SingletomLoader(){
   private static Singleton instance = new Singleton();
  }
  private Singleton(){};
  
  public static final Singleton getInstance(){
   
   return SingletomLoader.instance 
  }
 }  

總結(jié):spring容器中的bean便使用了單例模式,由spring容器控制其bean的生命周期,而如果設(shè)置成多例模式的話,則是交由J2EE容器負(fù)責(zé)其對象的生命周期。

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

相關(guān)文章

  • 解決Druid動態(tài)數(shù)據(jù)源配置重復(fù)刷錯誤日志的問題

    解決Druid動態(tài)數(shù)據(jù)源配置重復(fù)刷錯誤日志的問題

    使用druid數(shù)據(jù)庫連接池實現(xiàn)動態(tài)的配置數(shù)據(jù)源功能,在配置過程中出現(xiàn)一個問題既然是用戶自己配置的數(shù)據(jù)源,就無法避免輸入錯誤,連接失敗等情況,關(guān)于這個問題怎么處理呢,今天小編通過本文給大家詳細(xì)說明下,感興趣的朋友一起看看吧
    2021-05-05
  • springboot使用國產(chǎn)加密算法方式,sm2和sm3加解密demo

    springboot使用國產(chǎn)加密算法方式,sm2和sm3加解密demo

    這篇文章主要介紹了springboot使用國產(chǎn)加密算法方式,sm2和sm3加解密demo,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Spring的@Value注入復(fù)雜類型(通過@value注入自定義類型)

    Spring的@Value注入復(fù)雜類型(通過@value注入自定義類型)

    Spring的@Value可以注入復(fù)雜類型嗎?今天教你通過@value注入自定義類型。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java 實現(xiàn)websocket的兩種方式實例詳解

    java 實現(xiàn)websocket的兩種方式實例詳解

    這篇文章主要介紹了java 實現(xiàn)websocket的兩種方式實例詳解,一種使用tomcat的websocket實現(xiàn),一種使用spring的websocket,本文通過代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2018-07-07
  • 詳解Spring Cloud負(fù)載均衡重要組件Ribbon中重要類的用法

    詳解Spring Cloud負(fù)載均衡重要組件Ribbon中重要類的用法

    本篇文章主要介紹了詳解Spring Cloud負(fù)載均衡重要組件Ribbon中重要類的用法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • IDEA創(chuàng)建Java Web項目不能及時刷新HTML或JSP頁面問題

    IDEA創(chuàng)建Java Web項目不能及時刷新HTML或JSP頁面問題

    這篇文章主要介紹了IDEA創(chuàng)建Java Web項目不能及時刷新HTML或JSP頁面問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • swagger文檔增強工具knife4j使用圖文詳解

    swagger文檔增強工具knife4j使用圖文詳解

    這篇文章主要介紹了swagger文檔增強工具knife4j使用詳解,想要使用knife4j非常簡單,只要在Springboot項目中引入knife4j的依賴即可,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • idea中項目前端網(wǎng)頁圖標(biāo)不顯示的原因及解決

    idea中項目前端網(wǎng)頁圖標(biāo)不顯示的原因及解決

    這篇文章主要介紹了idea中項目前端網(wǎng)頁圖標(biāo)不顯示的原因及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • mybatis-plus雪花算法生成Id使用詳解

    mybatis-plus雪花算法生成Id使用詳解

    本文主要介紹了mybatis-plus雪花算法生成Id使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 通過java生成讀取二維碼詳解

    通過java生成讀取二維碼詳解

    這篇文章主要介紹了java二維碼生成讀取詳解,二維碼再生活在無處不在,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,下面和小編一起來學(xué)習(xí)一下吧
    2019-05-05

最新評論