單例模式就是保證乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。(建議採用 餓漢式 建立方法。執行緒安全,容易實現。初始化慢一點。)
1,由於單例模式只生成乙個例項,所以能減少系統效能的開銷;
2,避免對共享資源的多重占用導致的效能損耗,如日誌檔案,應用配置;
3,提供了對唯一例項的受控訪問,加快物件訪問速度,比如多執行緒的執行緒池的設計,方便對池中的執行緒進行控制;
1,保證乙個類只有乙個例項;
2,在類中自己例項化自己;
3,向整個系統提供這個例項;
/**
* 餓漢式單例模式
*/public class singleton01
/**因為不需要加同步**塊就能保證執行緒安全,所以效率會高
* --------------->向整個系統提供這個例項;
* @return
*/public singleton01 getsingleton01()
}
可以看出,餓漢式的優點有,執行緒安全,呼叫效率高;但因為載入類時立即例項化,所以沒有延時載入的優勢,並且當沒有用到這個例項的話,就會白白例項化個物件,浪費資源。
/**
* 懶漢式單例模式
*/public class singleton02
/*** 第一次呼叫時才會例項化物件,並且之後不會再例項化,直接返回第一次建立的物件
* 通過新增關鍵字synchronized來保證執行緒安全,但執行緒等待的緣故所以效率會降低
* 只有用到才建立物件,所以叫懶漢式,故而資源利用率高了
*/public static synchronized singleton02 getsingleton02()
return singleton02;
}}
可以看出,懶漢式單例模式的優點有:資源利用率高了,有延時載入的優勢,執行緒安全;但呼叫效率低。
//靜態內部類方式
public class singleton03
/*** 私有構造器
*/private singleton03()
public static singleton03 getinstance()
}
總結下,靜態內部類方式的優點:執行緒安全,具有延時載入的優勢,資源利用率也搞,而且沒有使用同步**,效率還高。
//列舉式單例模式
public enum singleton04
}
總結:實現簡單,列舉本身就是單例,由jvm從根本上提供保障,避免通過反射和反序列化的漏洞!但沒有延遲載入!
可以自行測試下,其實還有個雙重檢驗鎖式單例模式,但偶爾會出問題,實用性比較低,也不推薦實用,這裡就不講了。
1,占用資源少,不需要延時載入,列舉式好如餓漢式;
2,占用資源多,需要延時載入,靜態內部類式好於懶漢式;
設計模式 單例模式
單例模式 singleton pattern 是乙個比較簡單的模式,其定義如下 ensure a class has only one instance,and provide a golbal point of acess to it.確保某乙個類只有乙個例項,而且自行例項化並且向整個系統提供這個...
設計模式 單例模式
class testsingleton static public function instance return self testsingleton private function clone public function setsinvar sinvar public function ...
設計模式 單例模式
單例模式的目的是保證類在系統中只被例項化一次,由該唯一的例項來為系統提供服務.單例模式主要用於保證服務的統一,比如獲取統一的編號服務,模仿oracle的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...