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操作)

相关推荐
瀚高PG实验室9 分钟前
HGDB集群(安全版)repmgr手动切换主备库
java·数据库·安全·瀚高数据库
刘新明198920 分钟前
Frida辅助分析OLLVM虚假控制流程(下)
java·开发语言·前端
第二只羽毛42 分钟前
重载和继承的实践
java·开发语言
王嘉俊9251 小时前
设计模式--适配器模式:优雅解决接口不兼容问题
java·设计模式·适配器模式
王嘉俊9251 小时前
设计模式--组合模式:统一处理树形结构的优雅设计
java·设计模式·组合模式
道19931 小时前
50 台小型无人车与50套穿戴终端 5 公里范围内通信组网方案深度研究
java·后端·struts
迎風吹頭髮1 小时前
UNIX下C语言编程与实践35-UNIX 守护进程编写:后台执行、脱离终端、清除掩码与信号处理
java·c语言·unix
光军oi1 小时前
全栈开发杂谈————JAVA微服务全套技术栈详解
java·开发语言·微服务
帮帮志1 小时前
目录【系列文章目录】-(关于帮帮志,关于作者)
java·开发语言·python·链表·交互
聪明的笨猪猪1 小时前
Java Spring “MVC ”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试