日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java 单列模式(Singleton)

發(fā)布時(shí)間:2025/5/22 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 单列模式(Singleton) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  單例模式(Singleton)

    定義:保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。

    目的:使得類的一個(gè)對(duì)象成為系統(tǒng)中的唯一實(shí)例。

  如何保證一個(gè)類只有一個(gè)實(shí)例并且這個(gè)實(shí)例易于被訪問(wèn)呢?

    我們都知道,一個(gè)類多次被new 創(chuàng)建后,獲取的是不同實(shí)例。    

創(chuàng)建一個(gè)類 public class NewObject {} 測(cè)試 public class NewOne {public static void main(String[] args) {NewObject no1= new NewObject();NewObject no2= new NewObject();System.out.println("no1--->"+no1);System.out.println("no2--->"+no2);} }

控制臺(tái)輸出的是:

 

由此可知:要想產(chǎn)生單個(gè)實(shí)例就得:讓類自身負(fù)責(zé)保存它的唯一實(shí)例,這個(gè)類可以保證沒有其他實(shí)例被創(chuàng)建,并且它可以提供一個(gè)訪問(wèn)該實(shí)例的方法。

    • 單例模式的類只提供私有的構(gòu)造函數(shù)
    • 類定義中含有一個(gè)該類的靜態(tài)私有對(duì)象
    • 提供了一個(gè)靜態(tài)的公有的函數(shù)用于創(chuàng)建或獲取它本身的靜態(tài)私有對(duì)象 

一般Singleton有是三種模式:懶漢式(最常用)、餓漢式、?雙重鎖

  懶漢式:

public class Singleton {/* * 懶漢式單例:只有在第一次請(qǐng)求實(shí)例的時(shí)候創(chuàng)建,并且只在第一次創(chuàng)建后,以后不再創(chuàng)建該類的實(shí)例 */ // 1.一個(gè)私有的指向自己的靜態(tài)變量 private static Singleton instance; // 2.私有的構(gòu)造方法,保證不能從外部創(chuàng)建對(duì)象 private Singleton(){} // 3.公開的靜態(tài)工廠方法,返回該類的唯一實(shí)例(當(dāng)發(fā)現(xiàn)沒有實(shí)例沒有初始化的時(shí)候才初始化) public static Singleton getInstance(){ if(instance == null){ instance = new Singleton(); System.out.println("創(chuàng)建Singleton類的實(shí)例"); }else { System.out.println("實(shí)例已經(jīng)創(chuàng)建,不能再創(chuàng)建"); } return instance; } } public class Test {public static void main(String[] args) { Singleton s = Singleton.getInstance(); System.out.println("第一次---->"+s); System.out.println("第二次---->"+Singleton.getInstance()); System.out.println("第三次---->"+Singleton.getInstance()); } }

  餓漢式:

public class Singleton2 { /* * 惡漢單例模式:在類加載的時(shí)候就創(chuàng)建一個(gè)單例模式. */ // 1.私有的構(gòu)造函數(shù),確保不能在類的外部訪問(wèn)該類的構(gòu)造函數(shù) private Singleton2(){ System.out.println("構(gòu)造函數(shù)執(zhí)行了"); } // 2.私有的唯一的靜態(tài)實(shí)例變量,在類加載的時(shí)候就創(chuàng)建好單例對(duì)象 private final static Singleton2 instance = new Singleton2(); // 3.公開的靜態(tài)工廠返回此類的唯一實(shí)例 public static Singleton2 getInstance(){ return instance; } } public class Test {public static void main(String[] args) { Singleton2 s1 = Singleton2.getInstance(); System.out.println(s1); System.out.println(Singleton2.getInstance()); System.out.println(Singleton2.getInstance()); } }

? ?雙重鎖

?

package com.單列模式;public class Singleton3 {private static Singleton3 instance=null;private Singleton3(){System.out.println("構(gòu)造函數(shù)開始!");}public static synchronized Singleton3 getInstance(){if(instance==null){synchronized(Singleton3.class){if(instance==null){instance=new Singleton3();}}}return instance;} } public class Test {public static void main(String[] args) { Singleton3 s3 =Singleton3.getInstance();System.out.println(s3);System.out.println(Singleton3.getInstance());System.out.println(Singleton3.getInstance());} }

?

?

謝謝大家的關(guān)注。小弟才疏學(xué)淺,更新的很慢,但我會(huì)把自己學(xué)的傾囊相授。人生兩大悲劇:一是萬(wàn)念俱灰,一是躊躇滿志。

?

?

?

  

?

轉(zhuǎn)載于:https://www.cnblogs.com/hxb2016/p/6125023.html

總結(jié)

以上是生活随笔為你收集整理的Java 单列模式(Singleton)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。