------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() {
}
}