設計模式之單件模式

一. 單件模式:保證一個類僅有一個實例,並提供一個全局訪問點。

二. 實例 

懶漢式:

    雙重檢查加鎖:減少使用同步,一個私有構造器,一個靜態方法,一個靜態變量。

    public class Singleton {
        private volatile static Singleton uniqueInstance; 
        //volatile提示JVM這個成員變量不能保存它的私有拷貝,而應直接與共享成員變量交互。
        private Singleton() { }//把構造器聲明爲私有的,只有在本類內才能調用構造器。
        public static Singleton getInstance() { //需定義成靜態方法
            if (uniqueInstance == null) { //防止每次進行判斷之前都要經過lock鎖定,耗時。
                    if (uniqueInstance == null) {
                        uniqueInstance = new Singleton();
                       }
                  }
              }
            return uniqueInstance;
          }
	public String getDescription() {
		return "I'm a thread safe Singleton!";
	 }
     }

 餓漢式:不管用不用,一開始就建立這個單例對象。

    public class Singleton{ 
        private static Singleton uniqueInstance = new Singleton();  //建立對象   
        private Singleton(){ }
        public static Singleton getInstance(){       
          return uniqueInstance ;//直接返回單例對象   
         }
    }

測試類:

    public class SingletonClient {
        public static void main(String[] args) {
            Singleton singleton = Singleton.getInstance();
            System.out.println(singleton.getDescription());
        }
    }

三. 應用場景

1. 單例模式應用的場景一般發現在以下條件下:

 (1)資源共享的情況下,避免資源操作時導致的性能或損耗等。如日誌文件,應用配置。

 (2)控制資源的情況下,方便資源之間的互相通信。如線程池等。

2. 常見應用:

任務管理器,回收站,網站的計數器,數據庫連接池,多線程的線程池,應用程序的日誌應用, Web應用的配置對象的讀取 等。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章