單例模式的三種實現方式

2021-10-07 07:31:21 字數 1859 閱讀 7150

1.餓漢模式

package com.fullstacker.study.designpattern.singleton;

/** * 餓漢模式 餓漢模式是執行緒安全的單例模式

* * @author xingguishuai

* @create 2017-03-27-15:53

**/public class hungrysingleton

public static hungrysingleton getintance()

}

2.懶漢模式

package com.fullstacker.study.designpattern.singleton;

/** * 懶漢模式

* * @author xingguishuai

* @create 2017-03-27-15:58

**/public class lazysingleton

/*** 功能描述:判斷是否存在存在例項,如果不存在則,建立物件

* 此時,否則返回例項,為執行緒不安全

* @return

* @param

* @author xingguishuai

* @date 2017-03-27 15:59

* @since 1.0

*/public static lazysingleton getintance()

return intance;

}/**

* 功能描述:判斷是否存在存在例項,如果不存在則,建立物件

* 此時,否則返回例項,同步方式獲取,但粒度較大,效率較低,可以使用雙重判斷的方法以優化

* @return

* @param

* @author xingguishuai

* @date 2017-03-27 15:59

* @since 1.0

*/public static synchronized lazysingleton getintancesyn()

return intance;

}}

3.雙重判斷的方法(懶漢模式優化)

package com.fullstacker.study.designpattern.singleton;

/** * 雙重判斷法

* * @author xingguishuai

* @create 2017-03-27-16:06

**/public class dubblesingleton

/*** 功能描述:判斷是否存在存在例項,如果不存在則,建立物件

* 此時,否則返回例項,為執行緒不安全

* @return

* @param

* @author xingguishuai

* @date 2017-03-27 15:59

* @since 1.0

*/public static dubblesingleton getintance() catch (interruptedexception e)

//同步**塊

synchronized (dubblesingleton.class)}}

return intance;

}}

4.使用靜態內部類來作為singleton的容器

public class staticsingleton 

private static class singletonholder

public static staticsingleton getinstance ()

}

單例模式的三種實現方式

所謂 餓漢式 是指單例項在類載入時刻就已構造完成。public class singleton1 類載入的初始化階段,會給靜態變數instance賦值,此時單例項得到構建 private static singleton1 instance newsingleton1 public static s...

實現單例的三種方式

1 必須在該類中 自己先建立出乙個物件並私有化物件.2 私有化自身的構造器 防止外界通過構造器建立新的物件 3 想外暴露乙個公共的靜態方法用於獲取自身的物件 目的 保證某乙個在整個應用中某乙個類有且只有乙個例項 乙個類在堆記憶體只存在乙個物件 即所有指向該型別例項的引用都指向同一塊記憶體空間。cla...

單例的三種實現方式

方式一 類方法實現單例模式 class mysql instance none def init self,host,port self.host host self.port port q classmethod defsingleton cls ifnot cls.instance cls.in...