單例模式很常見,多用于配置類飞蹂,資源加載類中柄延,下面我們來看4種單例模式(很精髓)都是現(xiàn)場(chǎng)安全的
餓漢式單例模式
package com.wwj.singletonmode;
/**
* 餓漢式獲取單例 線程安全 生產(chǎn)推薦用
*/
public class Single1 {
private static final Single1 single1 = new Single1();
//私有構(gòu)造器
private Single1(){}
//提供獲取實(shí)例的方法
public static Single1 getIntance(){
return single1;
}
public void doSthing(){
System.out.println("業(yè)務(wù)代碼");
}
}
常規(guī)懶漢式單例模式
package com.wwj.singletonmode;
/**
* 懶漢式獲取單例 線程安全
*/
public class Single2 {
private static Single2 single2;
//私有構(gòu)造器
private Single2(){}
//提供獲取實(shí)例的方法
public static Single2 getIntance(){
if(single2 == null){
synchronized (Single2.class){
if (single2 == null) {
single2 = new Single2();
}
}
}
return single2;
}
public void doSthing(){
System.out.println("業(yè)務(wù)代碼");
}
}
內(nèi)部類懶漢式單例模式
package com.wwj.singletonmode;
/**
* 內(nèi)部類獲取單例 線程安全
*/
public class Single3 {
private static class Mg{
private static final Single3 single3 = new Single3();
}
//私有構(gòu)造器
private Single3(){}
//提供獲取實(shí)例的方法
public static Single3 getIntance(){
return Mg.single3;
}
public void doSthing(){
System.out.println("業(yè)務(wù)代碼");
}
}
枚舉類懶漢式單例模式
package com.wwj.singletonmode;
/**
* 利用枚舉獲取單例 線程安全簡(jiǎn)單
*/
public enum Single4 {
INTANCE;
public void doSthing(){
System.out.println("業(yè)務(wù)代碼");
}
}
在具體的環(huán)境選擇合適的設(shè)計(jì)模式,設(shè)計(jì)模式是為項(xiàng)目服務(wù)的马篮,不要本末倒置