一文读懂Java中的设计模式——单例模式!默认情况下,Spring的Bean就是单例的

单例模式概念

单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。单例模式只应在有真正的“单一实例”的需求时才可使用。总结起来单例模式有三个优点:

  1. 全局访问共享资源:当需要在应用程序的多个地方共享和使用相同的资源时,单例模式可以确保所有使用该资源的组件都访问相同的实例。这样可以防止资源冲突和数据不一致。
  2. 减小内存开支:特别是一个对象需要频繁的创建、销毁时,而且创建或销毁时性能无法优化,单例模式的优势就非常明显。
  3. 减少性能开销:由于单例模式生成一个实例,所以减少了系统性能的开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接生产一个单例对象,然后用永远驻留内存的方式来解决

单例模式类关系图

单例模式代码实现

代码和注释实现如下,其他类只能通过SingletonPattern.getInstance方法获取实例

public class SingletonPattern {
    

    / /自身完成了实例化,实例对象通过getInstance方法获取
     private static final SingletonPattern singletonPattern= new SingletonPattern(); 

    // 限制住其他类不能直接产生一个SingletonPattern的实例 
     private SingletonPattern(){ 
     } 

     //加synchronized目的是确保在并发情况下出现多个实例的情况
     public synchronized static SingletonPattern getInstance(){  
            return singletonPattern; 
     }  
}

测试代码实现如下:

public class TestSingleton {

    public static void main(String[] args) {
       
        Object obj = SingletonPattern.getInstance();
        //获取obj对象的类信息
        Class<?> clazz = obj.getClass();
        System.out.println(clazz); 
        
        Object s1=SingletonPattern.getInstance();
        Object s2=SingletonPattern.getInstance();
        
        //"=="比较的是对象的引用是否相等,而equals比较的是对象的值是否相等。
         System.out.println(s1==s2);

    }

}
输出

class com.my.singleton.SingletonPattern
true

从输出结果可以看出实例clazz的类型是SingletonPattern,而s1和s2的引用相同,证明是单例!

如果想下载源码,可以下载

https://download.csdn.net/download/liwenxiang629/88628902

一句话总结模板方法


单例模式就是一个类只提供一个实例,不能new多个实例!

我的每一篇文章都希望帮助读者解决实际工作中遇到的问题!如果文章帮到了您,劳烦点赞、收藏、转发!您的鼓励是我不断更新文章最大的动力!
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试开发Kevin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值