本篇內(nèi)容介紹了“java單例模式的詳細(xì)講解”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)公司主營(yíng)休寧縣網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app軟件定制開發(fā),休寧縣h5重慶小程序開發(fā)公司搭建,休寧縣網(wǎng)站營(yíng)銷推廣歡迎休寧縣等地區(qū)企業(yè)咨詢java 單例模式
餓漢式單例
對(duì)于餓漢模式,我們可這樣理解:該單例類非常餓,迫切需要吃東西,所以它在類加載的時(shí)候就立即創(chuàng)建對(duì)象。
懶漢式單例類
對(duì)于懶漢模式,我們可以這樣理解:該單例類非常懶,只有在自身需要的時(shí)候才會(huì)行動(dòng),從來不知道及早做好準(zhǔn)備。它在需要對(duì)象的時(shí)候,才判斷是否已有對(duì)象,如果沒有就立即創(chuàng)建一個(gè)對(duì)象,然后返回,如果已有對(duì)象就不再創(chuàng)建,立即返回。
單例設(shè)計(jì)模式常用于JDBC鏈接數(shù)據(jù)庫
注意:
1 我們常用的是第一種餓漢式,因?yàn)?
(1)既然采用了單例設(shè)計(jì)模式,就是為了使用單例類的對(duì)象,所以就先把他實(shí)例化出來.
(2)在懶漢式中存在一定的安全隱患,需要加上同步關(guān)鍵字synchronized,否則就談不上單例了,但是加上了synchronized效率就稍遜了
2 在第一種辦法中,代碼private static final Single SINGLE=new Single();為什么有final呢?
因?yàn)楸籪inal關(guān)鍵字修飾的類,不能被繼承,被final修飾的成員變量不可以被修改.
此處用了final為了強(qiáng)化和重點(diǎn)突出:"同一對(duì)象"這個(gè)概念——只有這么一個(gè)對(duì)象,而且它是不可以被修改的.
如果不用final修飾 Single SINGLE那么就會(huì)有這么一種情況:業(yè)務(wù)很復(fù)雜,在不經(jīng)意間就修改了此對(duì)象,造成各種錯(cuò)誤.
第一種(餓漢式):
思路:
(1)不讓其他類建立該類的對(duì)象.即將構(gòu)造函數(shù)設(shè)置為私有!
(2)自定義一個(gè)本類對(duì)象
(3)將自定義的對(duì)象提供出去.即定義一個(gè)get方法,返回值為此類的對(duì)象。
分析:
第一步:將單例類中構(gòu)造函數(shù)私有化了且利用一個(gè)get()函數(shù)向外提供此類的對(duì)象,所以其他類無法構(gòu)造此類的對(duì)象。
第二步:但其他類要想調(diào)用此單例類里的方法,于是只有采用內(nèi)名.方法名()來實(shí)現(xiàn),這就要求這個(gè)方法必須是靜態(tài)static的。
第三步:又因?yàn)殪o態(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是同一對(duì)象即: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是同一對(duì)象即: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(){//多線程時(shí)加上synchronized是關(guān)鍵!?。?nbsp; if(SINGLE==null){ SINGLE=new Single(); return SINGLE; } else{ return SINGLE; } } }
“java單例模式的詳細(xì)講解”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
當(dāng)前題目:java單例模式的詳細(xì)講解-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://vcdvsql.cn/article20/hocjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、建站公司、動(dòng)態(tài)網(wǎng)站、電子商務(wù)、App設(shè)計(jì)、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)