单例模式1-饿汉式

J2EE标准的ServletContext、ServletContextConfig,Spring的ApplicationContext,数据库的连接池等都是单例的形式。

饿汉式单例模式是很常见的一种模式,顾名思义就是在类加载的时候就立即初始化,创建单例的对象。
Spring Ioc容器的ApplicationContext就是饿汉式

饿汉式单例奥义

  • 构造器私有
  • 提供getInstance()方法
  • 类加载的时候就初始化

饿汉式单例写法

写法1

public class HungrySingleton {

    private static final HungrySingleton HUNGRY_SINGLETON = new HungrySingleton();

    /**
     * 这里构造器一定要私有
     */
    private HungrySingleton() {
    }

    /**
     * 对外暴露这个getInstance()方法即可
     * @return
     */
    public static HungrySingleton getInstance() {
        return HUNGRY_SINGLETON;
    }

}

写法2

静态代码块的形式

public class HungrySingleton2 {

    private static final HungrySingleton2 HUNGRY_SINGLETON;
    
    static {
        HUNGRY_SINGLETON = new HungrySingleton2();
    }

    /**
     * 这里构造器一定要私有
     */
    private HungrySingleton2() {
    }

    /**
     * 对外暴露这个getInstance()方法即可
     * @return
     */
    public static HungrySingleton2 getInstance() {
        return HUNGRY_SINGLETON;
    }

}

差别不大;

小结

由于是在类加载的时候就进行初始化了,所以,如果存在很多饿汉式单例,实际又用不上那么多实例,那就是占着茅坑不拉屎,浪费内存了,但是像ServletContext、ApplicationContext,就比较适合饿汉式,毕竟你总不能web项目不用Servlet容器,导了Spring不用IoC吧?

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容