91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java單例模式的詳細講解

發布時間:2021-09-01 17:00:52 來源:億速云 閱讀:146 作者:chen 欄目:開發技術

本篇內容介紹了“java單例模式的詳細講解”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

java 單例模式

餓漢式單例

對于餓漢模式,我們可這樣理解:該單例類非常餓,迫切需要吃東西,所以它在類加載的時候就立即創建對象。

懶漢式單例類

對于懶漢模式,我們可以這樣理解:該單例類非常懶,只有在自身需要的時候才會行動,從來不知道及早做好準備。它在需要對象的時候,才判斷是否已有對象,如果沒有就立即創建一個對象,然后返回,如果已有對象就不再創建,立即返回。

單例設計模式常用于JDBC鏈接數據庫

注意:

1 我們常用的是第一種餓漢式,因為:

 (1)既然采用了單例設計模式,就是為了使用單例類的對象,所以就先把他實例化出來.

 (2)在懶漢式中存在一定的安全隱患,需要加上同步關鍵字synchronized,否則就談不上單例了,但是加上了synchronized效率就稍遜了

2 在第一種辦法中,代碼private static final Single SINGLE=new Single();為什么有final呢?

因為被final關鍵字修飾的類,不能被繼承,被final修飾的成員變量不可以被修改.

此處用了final為了強化和重點突出:"同一對象"這個概念——只有這么一個對象,而且它是不可以被修改的.

如果不用final修飾 Single SINGLE那么就會有這么一種情況:業務很復雜,在不經意間就修改了此對象,造成各種錯誤.

第一種(餓漢式):

思路:

(1)不讓其他類建立該類的對象.即將構造函數設置為私有!
(2)自定義一個本類對象
(3)將自定義的對象提供出去.即定義一個get方法,返回值為此類的對象。

 分析:

 第一步:將單例類中構造函數私有化了且利用一個get()函數向外提供此類的對象,所以其他類無法構造此類的對象。
 第二步:但其他類要想調用此單例類里的方法,于是只有采用內名.方法名()來實現,這就要求這個方法必須是靜態static的。
 第三步:又因為靜態方法只能訪問靜態成員!所以要將SINGLE設置為靜態的

public class SingleDemo { 
  public static void main(String[] args) { 
     Single s1=Single.getSingle(); 
     s1.setNumber(44); 
     Single s2=Single.getSingle(); 
     s2.setNumber(55); 
     System.out.println("s1.number="+s1.number); 
     System.out.println("s2.number="+s2.number); 
     if(s1.equals(s2)){ 
        System.out.println("s1與s2是同一對象即:s1==s2");//if條件成立 
       } 
   } 
} 
 
 
class Single{ 
  int number; 
  public int getNumber() { 
       return number; 
     } 
  public void setNumber(int number) { 
       this.number = number; 
     } 
  private Single(){};//第一步 
  private static final Single SINGLE=new Single();//第三步 
  public static Single getSingle(){//第一步和第二步 
       return SINGLE; 
  } 
}

第二種(懶漢式):

package cn.com; 
public class SingleDemo2 { 
   public static void main(String[] args) { 
      Single s1=Single.getSingle(); 
      s1.setNumber(44); 
      Single s2=Single.getSingle(); 
      s2.setNumber(55); 
      System.out.println("s1.number="+s1.number); 
      System.out.println("s2.number="+s2.number); 
      if(s1.equals(s2)){ 
        System.out.println("s1與s2是同一對象即:s1==s2");//if條件成立 
       } 
     } 
 
 
} 
 
 
class Single{ 
   int number; 
   public int getNumber() { 
       return number; 
     } 
   public void setNumber(int number) { 
       this.number = number; 
     } 
   private Single(){}; 
   private static Single SINGLE=null; 
   public static synchronized Single getSingle(){//多線程時加上synchronized是關鍵!!! 
      if(SINGLE==null){ 
         SINGLE=new Single(); 
         return SINGLE; 
       } 
      else{ 
         return SINGLE; 
        } 
   } 
}

“java單例模式的詳細講解”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西贡区| 兴文县| 游戏| 宁阳县| 沐川县| 成都市| 静海县| 苗栗市| 余干县| 兴仁县| 方正县| 阳西县| 惠州市| 通州市| 尼勒克县| 色达县| 襄樊市| 宝清县| 伊吾县| 石棉县| 五大连池市| 古田县| 许昌县| 洪泽县| 将乐县| 遂昌县| 沁阳市| 南安市| 平安县| 龙胜| 太保市| 丹东市| 满城县| 甘谷县| 乐都县| 铜川市| 辰溪县| 从化市| 徐州市| 喀喇沁旗| 通州区|