單例模式 四種

2021-10-02 03:35:52 字數 2236 閱讀 4462

餓漢式

單例模式 餓漢式類載入到記憶體後,例項化乙個單例,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() */

/* ()->*/

匿名內部類單例模式

完美方式之一

靜態內部類方式

jvm負責保證執行緒安全

不理解的地方,在載入時候,mag03handle 是否會被直接載入進入,不理解,主要是無法測試class.forname理解還是不夠

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...