单例模式

作为一种常用的软件设计模式,单例模式保证了类在系统中的唯一性,唯一实例通过接口供外界访问,提供了对实例个数的控制并节约了系统资源。从数学的角度而言,若将系统中的同一类归为一个集合,则单例模式即为最多仅有一个元素的集合。通过对单例模式的简单调整,也可以实现对系统内实例数量的精确控制。

由于单例模式需要保证类实例的唯一性,因此不能提供公共构造函数对类进行实例化操作。将构造函数私有,通过公共接口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();
    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容