单例对象(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; } }
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 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 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 style="font-size:12px;">public enum Singleton {INSTANCE;
public void dosth(String arg) {
// 逻辑代码
}
}
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/13766.html