設計模式之單例模式

2021-10-03 07:35:43 字數 1927 閱讀 2648

餓漢式

public class hungerysingleton 

//返回例項物件

public static hungerysingleton getinstance()

public static void main(string args) ).start();}}

}

分析:載入的視乎就例項化了,執行緒安全,但未能延遲載入,影響效能

懶漢式

public class lazysingleton 

public static lazysingleton getinstance()

public static void main(string args) ).start();}}

}

執行緒不安全,實現了懶載入

懶漢式+synchronize

public class lazysingleton 

public static synchronized lazysingleton getinstance()

public static void main(string args) ).start();}}

}

執行緒安全,但synchronize會序列執行,降低效率

dcl

public class dcl 

public static dcl getinstance()

}return instance;

}public static void main(string args) ).start();}}

}

執行緒安全,懶載入,效能好,但由於指令重排,可能會有空指標異常

volatile+dcl

public class dcl 

public static dcl getinstance()

}return instance;

}public static void main(string args) ).start();}}

}

效能好,執行緒安全,懶載入,但比較複雜

靜態內部類實現

public class innersingleton 

private static class innerdemo

public static innersingleton getinstance()

public static void main(string args) ).start();}}

}

利用了 classloader 機制來保證初始化 instance 時只有乙個執行緒, innersingleton 類被載入了,但 instance 不一定被初始化。因為 innerdemo 類沒有被主動使用,只有通過顯式呼叫 getinstance 方法時,才會顯式裝載 innerdemo 類,從而例項化 instance。

效能好,線性安全,懶載入,實現簡單,推薦使用

列舉

public class enumsingleton 

private enum enuminner

private enumsingleton getinstance()

}public static enumsingleton getinstance()

public static void main(string args) ).start();}}

}

效能好,線性安全,懶載入,推薦使用

設計模式之單例模式

前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會23種設計模式並且會熟練運用的人,真的就是大師級的牛人了,設計模式是乙個專案主管或者架構師一定要會的東西...

設計模式之單例模式

package com.xie.singleton public class singleton 提供乙個共有的靜態的入口方法 public static singleton getinstance 懶漢式 延遲載入 提供乙個私有的靜態的成員變數,但不做初始化 private static sing...

設計模式之 單例模式

單例模式 singleton 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式 單件模式 使用方法返回唯一的例項 public class singleton private static singleton instance public static singleton geti...