核心作用 優點
現實方式
實際舉例
如何解決反射和反序列化漏洞(
保證乙個類只有乙個例項,並且提供乙個訪問該例項的全域性訪問點。
1 由於單例模式只生成乙個例項,減少了系統效能開銷,當乙個物件的產生需要比較多的資源時,如讀取配置、產生其他依賴物件時,則可以通過在應用啟動時直接產生乙個單例物件,然後永久駐留記憶體的方式來解決
2 單例模式可以在系統設定全域性的訪問點,優化環共享資源訪問,例如可以設計乙個單例類,負責所有資料表的對映處理
主要:•餓漢式(執行緒安全,呼叫效率高。但是,不能延時載入。)
•懶漢式(執行緒安全,呼叫效率不高。但是,可以延時載入。)
其他:•雙重檢測鎖式(由於jvm底層內部模型原因,偶爾會出問題。不建議使用)
•靜態內部類式(執行緒安全,呼叫效率高。但是,可以延時載入)
•列舉單例(執行緒安全,呼叫效率高,不能延時載入)
餓漢式
public class singletondemo1
//方法沒有同步,呼叫效率高!
public static singletondemo1 getinstance()
}
懶漢式
public class singletondemo2
//方法同步,呼叫效率低!
public static synchronized singletondemo2 getinstance()
return instance; }
}
雙重檢測鎖式
public class singletondemo3
} instance = sc;
} }
} return instance;
} private singletondemo3()
}靜態內部類式
public class singletondemo4
private singletondemo4()
//方法沒有同步,呼叫效率高!
public static singletondemo4 getinstance()
}
列舉單例
public enum singletondemo5
}
反射:在private修飾的空參構造器中檢測物件是否為空,若不為空丟擲執行時異常
private singletondemo6()
}
反序列化:在類中增加readresolve()方法
private object readresolve() throws objectstreamexception
設計模式 單例模式
單例模式 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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...