Java 单列模式(Singleton)
生活随笔
收集整理的這篇文章主要介紹了
Java 单列模式(Singleton)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
單例模式(Singleton)
定義:保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。
目的:使得類的一個對象成為系統中的唯一實例。
如何保證一個類只有一個實例并且這個實例易于被訪問呢?
我們都知道,一個類多次被new 創建后,獲取的是不同實例。
創建一個類 public class NewObject {} 測試 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);} }控制臺輸出的是:
由此可知:要想產生單個實例就得:讓類自身負責保存它的唯一實例,這個類可以保證沒有其他實例被創建,并且它可以提供一個訪問該實例的方法。
-
- 單例模式的類只提供私有的構造函數
- 類定義中含有一個該類的靜態私有對象
- 提供了一個靜態的公有的函數用于創建或獲取它本身的靜態私有對象
一般Singleton有是三種模式:懶漢式(最常用)、餓漢式、?雙重鎖
懶漢式:
public class Singleton {/* * 懶漢式單例:只有在第一次請求實例的時候創建,并且只在第一次創建后,以后不再創建該類的實例 */ // 1.一個私有的指向自己的靜態變量 private static Singleton instance; // 2.私有的構造方法,保證不能從外部創建對象 private Singleton(){} // 3.公開的靜態工廠方法,返回該類的唯一實例(當發現沒有實例沒有初始化的時候才初始化) public static Singleton getInstance(){ if(instance == null){ instance = new Singleton(); System.out.println("創建Singleton類的實例"); }else { System.out.println("實例已經創建,不能再創建"); } 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 { /* * 惡漢單例模式:在類加載的時候就創建一個單例模式. */ // 1.私有的構造函數,確保不能在類的外部訪問該類的構造函數 private Singleton2(){ System.out.println("構造函數執行了"); } // 2.私有的唯一的靜態實例變量,在類加載的時候就創建好單例對象 private final static Singleton2 instance = new Singleton2(); // 3.公開的靜態工廠返回此類的唯一實例 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("構造函數開始!");}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());} }?
?
謝謝大家的關注。小弟才疏學淺,更新的很慢,但我會把自己學的傾囊相授。人生兩大悲劇:一是萬念俱灰,一是躊躇滿志。
?
?
?
?
轉載于:https://www.cnblogs.com/hxb2016/p/6125023.html
總結
以上是生活随笔為你收集整理的Java 单列模式(Singleton)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tsung MQTT协议简介及MQTT
- 下一篇: 三星笔记本怎么进入usb启动设置密码 三