麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > .NET > 正文

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

2024-07-10 13:32:39
字體:
供稿:網(wǎng)友

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為了強(qiáng)化和重點突出:"同一對象"這個概念——只有這么一個對象,而且它是不可以被修改的.

如果不用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)的

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是關(guān)鍵!!!       if(SINGLE==null){          SINGLE=new Single();          return SINGLE;        }       else{          return SINGLE;         }    } } 

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


注:相關(guān)教程知識閱讀請移步到ASP.NET教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 亚洲一区二区中文字幕在线观看 | 羞羞视频入口 | 亚洲九色 | a一级黄色大片 | 美女扒开腿让男生桶爽网站 | 91精品国产一区二区三区四区在线 | 欧美成人一级片 | 日韩欧美中文字幕视频 | 日本精品视频一区二区三区四区 | 精品国产一区二区亚洲人成毛片 | 99亚洲伊人久久精品影院红桃 | 一区二区三区在线观看国产 | 毛片免费视频观看 | 国产精品视频免费在线观看 | 一本一本久久a久久精品综合小说 | 91精品久久久久久久久久久 | 毛片视频网站 | 性欧美xxxx免费岛国不卡电影 | 精品三级内地国产在线观看 | 精品国产91久久久 | 国产精品久久久久久影视 | 精品在线视频播放 | 成人精品一区二区三区中文字幕 | www.com香蕉 | 国产精品热 | 欧美精品一区二区久久 | 天堂亚洲一区 | 国产日韩在线观看一区 | 免费观看黄色一级视频 | 免费99热在线观看 | 色中射 | 亚洲综合视频网 | 亚洲视频在线观看免费 | 成人福利免费在线观看 | 国产亚洲精品久久久久久久久 | 亚洲国产成人久久一区www妖精 | 精品国产一区二区三区成人影院 | 日韩精品中文字幕一区二区三区 | 亚洲成人精品一区二区 | 在线a毛片免费视频观看 | 精品一区二区免费视频视频 |