------Java教育訓練、Android教育訓練、iOS教育訓練、.Net教育訓練、期待與您交流! -------
1、單例模式之餓漢式(線程安全):
/**
* 單例模式之餓漢式:先初始化對象,然後通過靜态方法直接傳回執行個體
* @author guoqiang
*/
public class Singleton {
private static Singleton INSTANCE = new Singleton();
private Singleton(){
}
public static Singleton getInstance() {
return INSTANCE;
}
}
2、單例模式之懶漢式(線程不安全) :
/**
* 單例模式之懶漢式:調用靜态方法擷取執行個體時才建立對象
* @author guoqiang
*/
public class Singleton {
private static volatile Singleton INSTANCE;
private Singleton(){
}
public static Singleton getInstance() {
if(null == INSTANCE) {
INSTANCE = new Singleton();
}
return INSTANCE;
}
}
3、單例模式之雙重檢查鎖式,這是懶漢式的變種(JDK1.5之後線程安全)
/**
*
* 這裡用到的DCL,在JDK1.5之後用volatile可以解決DCL的并發問題
* @author guoqiang
*/
public class Singleton {
private static volatile Singleton INSTANCE;
private Singleton(){
}
public static Singleton getInstance() {
if(null == INSTANCE) {
synchronized (INSTANCE) {
if(null == INSTANCE) {
INSTANCE = new Singleton();
}
}
}
return INSTANCE;
}
}
4、單例模式之靜态内部類式(線程安全)
/**
* 單例模式靜态内部類式:利用了classloder的機制來保證初始化instance時隻有一個線程,
* 在Singleton類被裝載之後,instance不一定被初始化,因為SingletonHolder類沒有被主動使用,
* 隻有顯示通過調用getInstance方法時,才會顯示裝載SingletonHolder類,進而執行個體化instance。
* @author guoqiang
*/
public class Singleton {
private static class SingletonHolder{
private static final Singleton INSTANCE = new Singleton();
}
private Singleton(){
}
public static final Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
5、模闆方法模式
public class ConcreteTemplate extends AbstractTemplate{
@Override
public void abstractMethod() {
// 子類相關業務代碼
}
@Override
public void doHookMethod() {
//子類相關業務代碼
}
}
abstract class AbstractTemplate {
/**
* 模版方法,用final防止子類重寫
*/
public final void templateMethod() {
// 調用基本方法
abstractMethod();
doHookMethod();
}
/**
* 由子類實作的基本方法
*/
protected abstract void abstractMethod();
/**
* 鈎子方法,空實作
*/
protected void doHookMethod() {
}
}