設計模式 單例模式

2021-09-24 02:47:16 字數 1410 閱讀 1310

核心作用 優點

現實方式

實際舉例

如何解決反射和反序列化漏洞(

保證乙個類只有乙個例項,並且提供乙個訪問該例項的全域性訪問點。

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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...