设计模式(一) ——单例模式 (6种实现、优缺点、以及应用场景)

本文详细介绍了单例模式的定义、设计要素和6种实现方式,包括线程不安全的懒汉式、线程安全的饿汉式、线程安全的懒汉式、双重检查锁实现、静态内部类实现和枚举类实现,分析了各自的优缺点。文章还探讨了如何防止反序列化导致的单例破坏,并列举了单例模式的实际应用场景。
摘要由CSDN通过智能技术生成

目录

一、单例模式的定义

二、单例模式的设计要素

三、单例模式的6种实现及优缺点

(一)懒汉式(线程不安全)

(二)饿汉式(线程安全)

(三)懒汉式(线程安全)

(四)双重检查锁实现(线程安全)

(五)静态内部类实现(线程安全)

(六)枚举类实现(线程安全)

防止反序列化

四、单例模式的应用场景


 

一、单例模式的定义

定义:确保一个类只有一个实例,并提供该实例的全局访问点。

这样做的好处是:有些实例,全局只需要一个就够了,使用单例模式就可以避免一个全局使用的类,频繁的创建与销毁,耗费系统资源。

 

 

二、单例模式的设计要素

  1. 一个私有构造函数 (确保只能单例类自己创建实例)
  2. 一个私有静态变量 (确保只有一个实例)
  3. 一个公有静态函数 (给使用者提供调用方法)

简单来说就是,单例类的 构造方法不让其他人修改和使用;并且单例类自己只创建一个实例,这个实例,其他人也无法修改和直接使用;然后单例类提供一个调用方法,想用这个实例,只能调用。这样就确保了全局只创建了一次实例。

 

 

 

三、单例模式的6种实现及各实现的优缺点

 

(一)懒汉式(线程不安全)

实现:

public class Singleton {
     private static Singleton uniqueInstance;
   
     private Singleton() {
        
    }
    
    public static Singleton getUniqueInstance() {
        if (uniqueInstance == null) {
            uniqueInstance = new Singleton();
        }
        return uniqueInstance;
    }
}

说明:先不创建实例,当第一次被调用时,再创建实例,所以被称为懒汉式。

优点:延迟了实例化,如果不需要使用该类,就不会被实例化,节约了系统资源。

缺点:线程不安全,多线程环境下,如果多个线程同时进入了 if (uniqueInstance == null) ,若此时还未实例化,也就是uniqueInstance == null,那么就会有多个线程执行 uniqueInstance = new Singleton(); ,就会实例化多个实例;

 

 

(二)饿汉式(线程安全)

实现:

public class Singleton {
    
    private static Singleton uniqueInstance = new Singleton();
    
    private Singleton() {
    }
    
    public static Singleton getUniqueInstance() {
        re
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值