作为一种常用的软件设计模式,单例模式保证了类在系统中的唯一性,唯一实例通过接口供外界访问,提供了对实例个数的控制并节约了系统资源。从数学的角度而言,若将系统中的同一类归为一个集合,则单例模式即为最多仅有一个元素的集合。通过对单例模式的简单调整,也可以实现对系统内实例数量的精确控制。
由于单例模式需要保证类实例的唯一性,因此不能提供公共构造函数对类进行实例化操作。将构造函数私有,通过公共接口getInstance()提供对实例化类的访问,同时需要考虑到多线程场景下的线程安全性。具体代码实现如下:
public class Singleton
{
private Singleton()
{
//default empty constructor
}
private static class SingletonFactory
{
private static Singleton instance = new Singleton();
}
public static Singleton getInstance()
{
return SingletonFactory.instance;
}
public Object readResovle()
{
return getInstance();
}
}
这里的单例模式采用了静态内部类的方式实现,由于类的加载过程是线程互斥的,所以instance对象只会被创建一次,并将有效将赋值给instance的内存初始化完毕。除此之外,也可以采用synchronized关键字实现单例模式:
public class Singleton
{
private static Singleton instance = null;
private Singleton()
{
//default empty constructor
}
private static synchronized void initInstance()
{
if(null == instance)
{
instance = new Singleton();
}
}
public static Singleton getInstance()
{
if(null == instance)
{
initInstance();
}
return instance;
}
public Object readResovle()
{
return getInstance();
}
}