设计模式 - 单例设计模式

本文介绍了Java中的单例模式,包括其定义、实现方式及其应用场景。详细解析了饿汉式和懒汉式两种实现方法的区别,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单例模式是Java中最常用的模式之一,它通过阻止外部实例化和修改,来控制所创建的对象的数量。这个概念可以被推广到仅有一个对象能更高效运行的系统,或者限制对象实例化为特定的数目的系统中。例如:

1.私有构造函数 - 其他类不能实例化一个新的对象。
2.私有化引用 - 不能进行外部修改。
3.公有静态方法是唯一可以获得对象的方式。


单例的两种写法:饿汉式和懒汉式

(1)饿汉式 开发通常用这种方式

class Singleton {
    //1,私有构造函数,其他类就不能访问构造方法了
    private Singleton(){}
    //2,创建本类对象,private使外部不能随意更改
    private static final Singleton s = new Singleton();
    //3,对外提供公共的访问方法
    public static Singleton getInstance() {
            return s;
    }
}

(2)懒汉式 面试通常考这种方式
饿汉式 是不管你用不用,上来就创建对象
懒汉式 是事先做个判断 什么时候用什么时候创建

//懒汉式, 单例的延迟加载模式 面试
class Singleton {
    //1,私有构造函数
    private Singleton(){}
    //2,声明一个本类的引用
    private static final Singleton s;
    //3,对外提供公共的访问方法
    public static Singleton getInstance() {
        if(s == null)
        //线程1,线程2
        s = new Singleton();
        return s;
    }
}

懒汉式在多线程使用时有安全隐患,有可能创建出多个对象出来。所以开发一般用饿汉式,面试一般是懒汉式。

饿汉式和懒汉式的区别
1,饿汉式是空间换时间,懒汉式是时间换空间
2,在多线程访问时,饿汉式不会创建多个对象,而懒汉式有可能会创建多个对象


来看一下使用情况:一个国家只能有一位总统(可能在正常情况下)。所以不管任何时候我们需要一位总统,使用AmericaPresident就能返回一个。getPresident()方法将确保只有一个总统对象被创建。否者,就不妙了。

类图
这里写图片描述

public class AmericaPresident {
    private AmericaPresident() {}

    private static final AmericaPresident thePresident=new AmericaPresident();

    public static AmericaPresident getPresident(){
        return thePresident;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值