單實例模式


 

單例模式(Singleton Pattern)是 Java 中最簡單的設計模式之一。這種類型的設計模式屬於創建型模式,它提供了一種創建對象的最佳方式。

1.什么時候需要單實例模式?

整個類在系統運行過程中只允許一個對象,並且這個對象在整個系統的任何地方,都能夠被隨時隨地的訪問得到,並且所有的客戶訪問的都是同一個對象。

2.怎么來做呢?

三個要點:(1)你要定義一個私有化的構造函數

     (2)你要定義一個私有的成員變量

     (3)你要定義一個共有的get函數(所有的用戶通過這個get函數都能夠訪問到唯一的這個單實例)

 

單例類只能有一個實例。
單例類必須自己創建自己的唯一實例。
單例類必須給所有其他對象提供這一實例。

 

 

 

 

 

 

 

1.單例模式——線程安全的餓漢模式

public class Singleton {
private static Singleton instance = new Singleton();
private Singleton(){

}
public static Singleton getInstance(){
return instance;
}
}

2.單例模式——線程安全的懶漢模式 

public class Singleton {
private static Singleton instance = null;
private Singleton(){

}
  //如果不加synchronized,則是線程不安全的
public static synchronized Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}

3.單例模式——線程安全的懶漢模式改進版(雙重檢查鎖)

/**
*雙重鎖:為了減少同步的開銷
*/
public class Singleton{
// 靜態可見的實例
private static volatile Singleton instance = null;
// 無參構造器
private Singleton(){

}
public Singleton getInstance(){
if(instance == null){
synchronized(Singleton.class){
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}

4.單例模式——私有的內部工廠類(線程安全)

public class Singleton {
private Singleton(){
}

public static Singleton getInstance(){
return SingletonFactory.Instance;
}

private static class SingletonFactory{
private static Singleton Instance = new Singleton();
}
}
//內部類也可以換成內部接口,但是工廠類變量的作用域需為public


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM