餓漢式
單例模式 餓漢式類載入到記憶體後,例項化乙個單例,jvm保證執行緒安全(都不能建立新的,所以安全,多執行緒都是安全的)簡單易用
缺點:不管是否用到,類載入時候就會例項化,浪費
一般專案開發中載入是用的class.forname("") //將class載入到記憶體,但不例項化,此時,如果使用餓漢,就會消耗記憶體,所以產生了懶漢式
package designpatter.sington;
/** * @author susuper
* @version 1.0
* @date 2020/1/12 20:52
* @description
* 單例模式 餓漢式類載入到記憶體後,例項化乙個單例,jvm保證執行緒安全(都不能建立新的,所以安全,多執行緒都是安全的)
* 簡單易用
* 缺點:不管是否用到,類載入時候就會例項化,浪費
* 一般專案開發中載入是用的class.forname("") //將class載入到記憶體,但不例項化,此時,如果使用餓漢,就會消耗記憶體,所以產生了懶漢式
*/public
class
mag01
;//構造方法私有化
private
void
show()
public
static mag01 getinstance()
public
static
void
main
(string[
] args)
}
餓漢式
package designpatter.sington;
/** * @author susuper
* @version 1.0
* @date 2020/1/12 21:02
* @description
* lazy loading 懶漢式載入
*/public
class
mag02
//加鎖 由於這裡是static物件 所以鎖定的是mag02 .class
public
static
synchronized mag02 getinstance()
catch
(interruptedexception e)
instance =
newmag02()
;}return instance;
}public
static
void
main
(string[
] args)
// }).start();
// }
//lamda表示式對只有乙個方法的匿名內部類的乙個簡化
for(
int i =
0;i<
100;i++))
.start()
;//當只有一句話的時候還可以簡寫
// new thread(()->
// system.out.println(mag02.getinstance().hashcode())
// ).start();}}
}/**
new runnable() */
/* ()->*/
匿名內部類單例模式
完美方式之一不理解的地方,在載入時候,mag03handle 是否會被直接載入進入,不理解,主要是無法測試class.forname理解還是不夠靜態內部類方式
jvm負責保證執行緒安全
public
class
mag03
public
static mag03 getinstance()
}
列舉單例
由於列舉不存在構造方法,所以是單例的不僅可以解決執行緒同步,還可以防止反序列化
public
enum mag04 ).
start()
;}}}
···
四種單例設計模式
public class singletonlazy 私有化該類的構造器 public static singletonlazy getinstance 如果沒有例項,就建立乙個 return instance 返回例項物件 public class singletonhungary 私有化該類的構...
python四種實現單例模式
coding utf 8 author xianyt date 2018 func 在預設的情況下建立多個物件的id不相同,如果想要設定為單例模式,可以通過 new 方法中的 instance 在 new 方法中把類例項繫結到類變數 instance上,如果cls.instance為none表示該類...
四種方式實現單例模式
乙個類中只有乙個例項,除此外沒有其他的例項模式,有三種特性 構造器不可被外部建立 限制了外部的訪問方式 內部保證例項唯一 現在來介紹四種方式 public class singletonpattern01 public static singletonpattern01 getsingletonpa...