Java设计模式--单例模式

本文详细解析了Java设计模式中的单例模式,包括其概念、适用场景及不同类型的实现方式,如饿汉式、懒汉式及其改进版,并探讨了在Spring框架中单例模式的应用。

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

最近复习了Java的设计模式,现在来总结一下:
1.什么是单例模式?
单例模式(Singleton),是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。
2.什么时候下使用单例模式?
(1)举一个小例子,在我们的windows桌面上,我们打开了一个回收站,当我们试图再次打开一个新的回收站时,Windows系统并不会为你弹出一个新的回收站窗口。,也就是说在整个系统运行的过程中,系统只维护一个回收站的实例。这就是一个典型的单例模式运用。

(2)网站的计数器,一般也是采用单例模式实现,如果你存在多个计数器,每一个用户的访问都刷新计数器的值,这样的话你的实计数的值是难以同步的。

(3)对于一些应用程序的日志应用,或者web开发中读取配置文件都适合使用单例模式,如HttpApplication 就是单例的典型应用。

3.总结适用的场景:
1.需要生成唯一序列的环境
2.需要频繁实例化然后销毁的对象。
3.创建对象时耗时过多或者耗资源过多,但又经常用到的对象。
4.方便资源相互通信的环境

4.单例模式的要点:
(1)私有的构造方法
(2)指向自己实例的私有静态引用
(3)以自己实例为返回值的静态的公有的方法

5.单例模式根据实例化对象时机的不同分为两种: 一种是饿汉式单例,一种是懒汉式单例。
(1)饿汉式单例

public class Singleton {
    private static Singleton instance = new Singleton();
    private Singleton (){}
    public static Singleton getInstance() {
        return instance;
    }  
}

(2)懒汉式单例(线程不安全的) 单线程时是安全的,多线程就不安全了。

public class Singleton {  
     private static Singleton instance;  
     private Singleton (){}   
     public static Singleton getInstance() {  
     if (instance == null) {  
         instance = new Singleton();  
     }  
     return instance;  
     }  
 } 

(3)懒汉式单例改进版(线程安全的) 虽然改进了,不过效率很低。

public class Singleton {
    private static Singleton instance;
    private Singleton (){}
    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }  
}

(4)懒汉式单例升级版(双重检验锁机制、线程安全)

public class Singleton {  
    private volatile static Singleton singleton;
    private Singleton (){}   
    public static Singleton getSingleton() {
        if (singleton == null) {
            synchronized (Singleton.class) {
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }  
}

6.备注: spring中的bean默认是单例模式,在spring中其实是scope(作用范围)参数的缺省设定值,每个bean定义只生成一个对象实例,每次getBean请求获得的都是此实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值