一、概述
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。它的具体实现:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有对象,三是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。
二、代码
1、懒汉式 线程安全
/*
* 懒汉式,也是常用的形式。
*/
public class SingletonClass {
private static SingletonClass mSingletonClass;
private SingletonClass(){
}
public static synchronized SingletonClass newInstance(){
if(mSingletonClass == null){
mSingletonClass = new SingletonClass();
}
return mSingletonClass;
}
}
2、懒汉式 线程不安全
/*
* 懒汉式,也是常用的形式。
*/
public class SingletonClass {
private static SingletonClass mSingletonClass;
private SingletonClass(){
}
public static SingletonClass newInstance(){
if(mSingletonClass == null){
mSingletonClass = new SingletonClass();
}
return mSingletonClass;
}
}
3、饿汉式
/*饿汉式*/
public class SingletonClass{
private static final SingletonClass mSingletonClass = new SingletonClass();
private SingletonClass(){
}
public static SingletonClass newInstance(){
return mSingletonClass;
}
}
4、饿汉式 变种
/*饿汉式 变种*/
public class SingletonClass{
private SingletonClass mSingletonClass = null;
static {
mSingletonClass = new SingletonClass();
}
private SingletonClass(){
}
public static SingletonClass newInstance(){
return this.mSingletonClass;
}
}
5、枚举
/*枚举*/
public enum SingletonClass {
INSTANCE;
}
6、静态内部类
/*静态内部类*/
public class SingletonClass {
private static class SingletonHoder{
private static final SingletonClass INSTACE = new SingletonClass();
}
public static final SingletonClass newInstance(){
return SingletonHoder.INSTACE;
}
}
7、双重校验锁
/*双重校验锁*/
public class SingletonClass {
private static volatile SingletonClass mSingletonClass;
private SingletonClass(){
}
public SingletonClass newInstance(){
if(mSingletonClass == null){
synchronized (SingletonClass.class) {
mSingletonClass = new SingletonClass();
}
}
return mSingletonClass;
}
}
对于各种方法的比较更详细的描述:
http://cantellow.iteye.com/blog/838473