深入浅出设计模式之单态模式(singleton)
深入浅出设计模式之单态模式(singleton)
单态定义:
单态是指在一个JVM实例中,只存在一个对应Class的实例对象。
单态可以分为状态化和无状态化使用方式,比如网站的访问次数计数器,这个是有状态的实现,单态能够保存这个计数,并且使用同步或原子变量实现计数。另外,单态也可以无状态使用,提供工具性质的工作。使用单态模式的直接好处就是限制了实例个数,节省内存资源,有利于Java垃圾回收。
如何使用单态模式?
目前单态模式支持如下三种实现:
1.饿汉模式:
public class Singleton1 {private static final Singleton1 INSTANCE = new Singleton1();private Singleton1() {}public static Singleton1 getInstance() {return INSTANCE;}}
public class Singleton3 {private static Singleton3 INSTANCE;private Singleton3() {}public static synchronized Singleton3 getInSingleton() {if (INSTANCE == null) {INSTANCE = new Singleton3();}return INSTANCE;}}
public class Singleton2 {private volatile static Singleton2 INSTANCE;private Singleton2() {}//DCLpublic static Singleton2 getInstance() {if (INSTANCE == null) {//--------(1)synchronized (Singleton2.class){//----------(2)if (INSTANCE == null) { INSTANCE = new Singleton2();//-------------(3)}}}return INSTANCE;}}
public class Singleton4 {private static class SingletonHolder {public static final Singleton4 INSTANCE = new Singleton4();}private Singleton4() {}public static Singleton4 getInstance() {return SingletonHolder.INSTANCE;}}