单例模式之饿汉式

文章目录

单例模式(饿汉式)

单例模式是一种创建性的设计模式,主要是保证一个类只能有一个实例。全局中保证一个实例的使用。

单例模式饿汉式主要的构成是如下

  • 单例类
  • 私有化构造函数(防止实例化)
  • 私有化变量
  • 公共静态获得实例的方法(在调用这个方法前就已经实例化好了)

代码

静态变量创建实例代码

java 复制代码
package singleton;

/**
 *
 * @author: Hui
 **/
public class SingletonTest {

    public static void main(String[] args) {
        Singleton singleton = Singleton.getInstance();
        Singleton singleton1 = Singleton.getInstance();
        System.out.println(singleton == singleton1);
        System.out.println(singleton.hashCode());
        System.out.println(singleton1.hashCode());
    }

}

class Singleton{

    //1.私有化构造方法
    private Singleton(){}

    //2.创建一个静态对象
    private static Singleton instance = new Singleton();

    //3.创建一个静态返回实例方法
    public static Singleton getInstance(){
        return instance;
    }
}

静态代码块创建实例

java 复制代码
package singleton.type2;

/**
 * @author: Hui
 **/
public class SingletonTest2 {

    public static void main(String[] args) {
        Singleton singleton = Singleton.getInstance();
        Singleton singleton1 = Singleton.getInstance();
        System.out.println(singleton == singleton1);
        System.out.println(singleton.hashCode());
        System.out.println(singleton1.hashCode());
    }

}

class Singleton {

    //1.私有化构造方法
    private Singleton() {
    }

    //2.创建一个静态对象
    private static Singleton instance;

    static {
        instance = new Singleton();
    }

    //3.创建一个静态返回实例方法
    public static Singleton getInstance() {
        return instance;
    }
}

优点:提前实例化,不存在线程并发等问题。

缺点:不符合懒加载情况,在不使用该实例的时候会造成内存浪费。

相关推荐
NiNi_suanfa11 小时前
【Qt】Qt 批量修改同类对象
开发语言·c++·qt
小糖学代码11 小时前
LLM系列:1.python入门:3.布尔型对象
linux·开发语言·python
Data_agent11 小时前
1688获得1688店铺详情API,python请求示例
开发语言·爬虫·python
妖灵翎幺12 小时前
C++ 中的 :: 操作符详解(一切情况)
开发语言·c++·ide
开心香辣派小星12 小时前
23种设计模式-15解释器模式
java·设计模式·解释器模式
Halo_tjn12 小时前
虚拟机相关实验概述
java·开发语言·windows·计算机
star _chen12 小时前
C++实现完美洗牌算法
开发语言·c++·算法
周杰伦fans12 小时前
pycharm之gitignore设置
开发语言·python·pycharm
摆烂z12 小时前
Docker与Jib(maven插件版)实战
java
RainbowSea13 小时前
从 Spring Boot 2.x 到 3.5.x + JDK21:一次完整的生产环境迁移实战
java·spring boot·后端