初步認知:單例模式
阿新 • • 發佈:2018-11-19
單例模式介紹: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()方法,可能建立多個例項。此時可以給執行緒加鎖來處理。