1. 程式人生 > >初步認知:單例模式

初步認知:單例模式

單例模式介紹:http://www.runoob.com/design-pattern/singleton-pattern.html

單例模式就是保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點。

通常我們可以定義全域性變數訪問同一個物件,但它不能防止你例項化多個物件。一個最好的辦法就是,讓類自身負責儲存它的唯一例項。這個類可以保證沒有其他例項可以被建立,並且它可以提供一個訪問該例項的方法。

 

public class Singleton {
    private static Singleton instance;
    private Singleton(){}
    
    
public static Singleton getInstance(){ if(instance==null){ instance = new Singleton(); } return instance; } }

 

public class Test {
    public static void main(String[] args) {
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        
if(s1==s2){ System.out.println("兩個物件是相同的例項!"); } } }

輸出結果:

兩個物件是相同的例項!

 

單例模式因為Singleton類封裝它的唯一例項,這樣他可以嚴格地控制客戶怎樣訪問它以及何時訪問它。簡單地說就是對唯一例項的受控訪問。

單例類和java封裝的工具類有什麼區別?

相同點:java封裝的工具類也會採用私有化的構造方法來避免其有例項。

不同點:

1、java封裝的工具類不儲存狀態,僅提供一些靜態方法或者靜態屬性供其他類呼叫。而單例類是有狀態的。

2、java封裝的工具類不能用於繼承多型,而單例類雖然例項唯一,卻可以有子類來繼承。

3、java封裝的工具類只不過是一些方法屬性的集合,而單例類卻有著唯一的物件例項。

 

多執行緒時的單例

多執行緒的程式中,同時訪問Singleton類,呼叫GetSingleton()方法,可能建立多個例項。此時可以給執行緒加鎖來處理。