单例对象(Singleton)是一种常用的设计模式。
单例模式有一下特点:
1、单例类只能有一个实例。
2、单例类必须自己自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:
1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。
<span style="font-size:12px;">public class Singleton {
private final static Singleton INSTANCE = new Singleton();
//私有化构造方法,防止被实例化
private Singleton() {
}
public static Singleton getInstance() {
return INSTANCE;
}
}</span>
2、单例(懒汉模式)代码:
<span style="font-size:12px;"><span style="font-size:12px;">public final class LazySingleton
{
private static LazySingleton singObj = null;
private LazySingleton(){
}
public static LazySingleton getSingleInstance(){
if(null == singObj) singObj = new LazySingleton();
return singObj;
}
} </span></span>
<span style="font-size:12px;">public class Singleton {
private static volatile Singleton INSTANCE = null;
//私有化构造方法,防止被实例化
private Singleton() {
}
//双重检测
public static Singleton getInstance() {
if (INSTANCE == null) { //①
synchronized (Singleton.class) { //②
if (INSTANCE == null) { //③
INSTANCE = new Singleton(); //④
}
}
}
return INSTANCE;
}
}</span>
<span style="font-size:12px;">public class Singleton {
private Singleton() {
}
public static final Singleton getInstance() {
return InnerClass.INSTANCE;
}
private static class InnerClass {
private static Singleton INSTANCE = new Singleton();
}
}</span>
<span style="font-size:12px;">public enum Singleton {INSTANCE;
public void dosth(String arg) {
// 逻辑代码
}
}</span>