一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - java 單例模式(餓漢模式與懶漢模式)

java 單例模式(餓漢模式與懶漢模式)

2020-05-15 14:39lfdfhl JAVA教程

這篇文章主要介紹了java 單例模式(餓漢模式與懶漢模式)的相關(guān)資料,希望通過本文大家能掌握這部分內(nèi)容,需要的朋友可以參考下

java 單例模式

餓漢式單例

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

懶漢式單例類

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

單例設(shè)計模式常用于JDBC鏈接數(shù)據(jù)庫

注意:

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

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

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

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

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

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

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

第一種(餓漢式):

思路:

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

 分析:

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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;
  }
}

第二種(懶漢式):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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是關(guān)鍵!!!
      if(SINGLE==null){
         SINGLE=new Single();
         return SINGLE;
       }
      else{
         return SINGLE;
        }
   }
}

以上就是對java 單例設(shè)計模式的詳解,如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

原文鏈接:http://blog.csdn.net/lfdfhl/article/details/8195006

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产三及 | 成人免费在线视频网 | 四虎影院精品 | 公交车强校花系列小说 | 亚洲好视频 | 99热久久这里只有精品6国产网 | 粉嫩高中生第一次不戴套 | 国内精品久久久久久久久 | 99热精品久久 | 日本花季传媒2020旧版安卓 | 2021国产麻豆剧传媒剧情 | 日本久久免费大片 | 亚洲欧美色综合图小说 | 日本乱人伦中文在线播放 | 亚洲AVAV天堂AV在线网爱情 | 女主被当众调教虐np | 果冻传媒在线免费观看 | 波多野结衣 在线播放 | 特级老女人淫片高清视频 | 国产福利不卡视频 | 久久成人精品免费播放 | 国产精品短视频 | 校草太大了h | 五月激激激综合网色播免费 | 青青久久久国产线免观 | 女人和男人搞鸡 | 98色花堂永久地址国产精品 | 国产福利一区二区三区 | 男人狂躁女人下面狂叫图片 | 日本视频在线免费观看 | 特黄特色大片免费视频播放 | 男人叼女人的痛爽视频免费 | 性做久久久久久久久老女人 | 饭冈加奈子黑人解禁在线播放 | 亚洲国产在 | freesex性欧美炮机喷潮 | 日本激情在线 | 好男人在线观看免费高清2019韩剧 | 亚洲国产成人久久精品hezyo | 草莓秋葵菠萝蜜绿巨人污 | 国产美女做爰免费视频软件 |