單例(Singleton)模式的定義:指一個類只有一個實體,且該類能自行創建這個實體的一種模式,
單例模式有 3 個特點:
- 單例類只有一個實體物件;
- 該單例物件必須由單例類自行創建;
- 單例類對外提供一個訪問該單例的全域訪問點,
餓漢式單例
package single; //餓漢式單例 public class hungry { //構造器私有化 private hungry(){ } //一啟動類就直接加載 //可能會造成記憶體浪費 byte[] byte1=new byte[1024*1024]; byte[] byte2=new byte[1024*1024]; byte[] byte3=new byte[1024*1024]; byte[] byte4=new byte[1024*1024]; private final static hungry hun=new hungry(); public static hungry getHun(){ return hun; } }
懶漢式單例
package single; //懶漢式單例 public class LazyMan { // 構造器私有化 private LazyMan(){ } private volatile static LazyMan lazyMan; // 雙重檢測鎖的懶漢式單例 DCL單例模式 public static LazyMan getInstance(){ // 提高效率,這一層if判斷 if (lazyMan==null){ // 加鎖 synchronized (LazyMan.class){ if(lazyMan==null){ lazyMan=new LazyMan();//不是原子性操作,不要在屬性值上加volatile } } } return lazyMan; } }
靜態內部類單例
package single; //靜態內部類 public class Holder { // 構造器私有 private Holder(){ } // 呼叫靜態內部類 public static Holder getInstance(){ return holder.HOLDER; } // 靜態內部類 public static class holder{ private final static Holder HOLDER=new Holder(); } }
這三種是不安全的單例模式,可以通過反射拿到類中的屬性和方法
之后更新列舉單例模式
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/7271.html
標籤:設計模式
下一篇:機房重構—總結
