文章來源:軟件祕笈--設計模式那點事
單例模式(Singleton Pattern)
定義:確保某一個類只有一個實例,而且向整個系統提供這個實例的獲取方法。
使用單例模式的要點:
1、某各類只能有一個實例。
2、該類必須自己創建這個實例。
3、該類必須向系統提供這個實例。
模式結構圖:
代碼:
第一部分;線程安全的單例對象
//單例模式-------線程安全
package com.singleton;
public class Singleton {
//類共享實例對象
private static Singleton singleton = null;
//私有構造方法
private Singleton(){
System.out.println("This is Singleton!");
}
//synchronized保證線程安全,避免競爭
public synchronized static Singleton getInstance(){
//判斷共享對象是否爲null,如果是則new一個
if(singleton == null){
singleton = new Singleton();
}
return singleton;
}
}
package com;
import com.singleton.Singleton;
//測試程序
public class Client {
public static void main(String [] args){
//獲取single實例
Singleton singleton = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
if(singleton == singleton2){
System.out.println("這是同一個對象");
}
else{
System.out.println("這不是同一個對象");
}
}
}
二、類全局對象實例作爲單例對象
//創建一個類全局對象實例作爲單例對象
package com.singleton;
public class Singleton1 {
//類共享實例對象實例化
private static Singleton1 singleton = new Singleton1();
private Singleton1(){
System.out.println("This is Singleton1!");
}
public static Singleton1 getInstance(){
return singleton;
}
}
package com;
import com.singleton.Singleton1;
public class Client1 {
public static void main(String [] args){
//獲取single實例
Singleton1 singleton = Singleton1.getInstance();
Singleton1 singleton2 = Singleton1.getInstance();
if(singleton == singleton2){
System.out.println("這是同一個對象");
}
else{
System.out.println("這不是同一個對象");
}
}
}