Java重修笔记 第二十二天 单例模式、饿汉式和懒汉式

单例模式

定义:在整个系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的静态方法,有懒汉式和饿汉式两种。

饿汉式

实现步骤:

  1. 构造器私有化(防止直接new出对象,对象只能从静态方法的返回值中得到)

  2. 静态成员初始化该类的对象

  3. 向外暴露一个静态的公共方法,用来返回该静态属性的对象

java 复制代码
class GF{

    private String name;

    // 静态成员初始化该类的对象
    private static GF gf = new GF("123");

    // 将构造器私有化
    private GF(String name) {
        this.name = name;
    }

    // 向外暴露一个静态的公共方法,用来返回该静态属性的对象
    public static GF getInstance() {
        return gf;
    }

}

可以看出,饿汉式即便没有使用到对象实例,但随着类的加载它也会帮你创建好一个对象实例。

懒汉式

实现步骤:

  1. 构造器私有化(防止直接new出对象,对象只能从静态方法的返回值中得到)

  2. 静态成员声明该类的对象但不初始化

  3. 向外暴露一个静态的公共方法,用来初始化该类的对象并返回

java 复制代码
class MF {

    private String name;

    // 静态成员声明该类的对象但不初始化
    private static MF mf;

    // 将构造器私有化
    private MF(String name) {
        this.name = name;
    }

    // 向外暴露一个静态的公共方法,用来初始化该类的对象并返回
    public static MF getInstance() {
        if (mf == null) {
            return new MF("321");
        }
        return mf;
    }

}

这样就避免了类加载后直接就会创建对象的问题,懒汉式什么时候调用,就什么时候创建对象。

总结:懒汉式和饿汉式的区别是创建对象的时机不一样,饿汉式是直接在静态属性声明后直接初始化创建对象(即类加载便创建对象),懒汉式是声明但不创建对象,把创建对象的过程放到了方法里(什么时候调用静态方法什么时候创建对象)

饿汉式不存在线程安全问题,懒汉式存在线程安全问题(可能会有多个线程一起执行new操作)

相关推荐
小屁孩大帅-杨一凡1 分钟前
java后端请求想接收多个对象入参的数据
java·开发语言
java1234_小锋8 分钟前
使用 RabbitMQ 有什么好处?
java·开发语言
TangKenny21 分钟前
计算网络信号
java·算法·华为
肘击鸣的百k路22 分钟前
Java 代理模式详解
java·开发语言·代理模式
城南vision28 分钟前
Docker学习—Docker核心概念总结
java·学习·docker
wyh要好好学习36 分钟前
SpringMVC快速上手
java·spring
尢词38 分钟前
SpringMVC
java·spring·java-ee·tomcat·maven
Mr. zhihao44 分钟前
享元模式在 JDK 中的应用解析
java·享元模式
茶馆大橘1 小时前
微服务系列五:避免雪崩问题的限流、隔离、熔断措施
java·jmeter·spring cloud·微服务·云原生·架构·sentinel
wrx繁星点点1 小时前
享元模式:高效管理共享对象的设计模式
java·开发语言·spring·设计模式·maven·intellij-idea·享元模式