设计模式——单例模式

本文详细介绍了Java中实现单例模式的五种常见方法:饿汉式、饿汉式静态代码块、懒汉式线程不安全、双重检验锁(DCL)以及静态内部类实现。每种方式都有其特点,如饿汉式的线程安全和懒汉式的延迟加载。通过对比,展示了不同实现方式在性能和线程安全性上的差异,为开发者选择合适的单例实现提供了参考。

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

单例模式主要有5种形式。
1、饿汉式最基本形式

package com.company.designMode;


public class Singleton1 {

    // 单例模式,饿汉式

    // 构造函数私有化
    private Singleton1(){

    }

    // 创建对象

    private static final Singleton1 singleton1=new Singleton1();

    // 公有方法返回

    public static Singleton1 getInstance(){

        return singleton1;

    }
}

2、饿汉式静态代码块

package com.company.designMode;

public class Singleton2 {

    // 单例模式,饿汉式静态代码块

    // 构造函数私有化
    private Singleton2(){

    }

    // 创建对象
    private static Singleton2 singleton2;

    // 静态代码块
    static{

        singleton2 = new Singleton2();
    }

    // 公有方法返回

    public static Singleton2 getInstance(){

        return singleton2;
    }

}

3、懒汉式线程不安全

package com.company.designMode;

public class Singleton3 {

    // 懒汉式,线程不安全

    // 构造函数私有化
    private Singleton3(){

    }

    // 声明对象
    private static Singleton3 singleton3;


    // 公有方法返回
    public static Singleton3 getInstance(){

        if(singleton3==null){

            singleton3=new Singleton3();
        }

        return singleton3;
    }
}

4、懒汉式双重检验锁(DCL)

package com.company.designMode;

public class Singleton4 {

    // 懒汉式,双重检验锁(DCL)
    // volatile,synchronized,两个if

    // 构造函数私有化
    private Singleton4(){

    }

    // 声明对象
    private static volatile Singleton4 singleton4;

    // 公有方法返回
    public static Singleton4 getInstance(){

        if(singleton4==null){

            synchronized(Singleton4.class){

                if(singleton4==null){

                    singleton4=new Singleton4();
                }
            }
        }

        return singleton4;
    }
}

5、懒汉式静态内部类

package com.company.designMode;

public class Singleton5 {

    // 懒汉式,静态内部类实现
    // 构造函数私有化
    private Singleton5(){


    }

    // 静态内部类
    private static class Singleton{
        private static final Singleton5 singleton5=new Singleton5();
    }

    // 公有方法返回
    public static Singleton5 getinstance(){

        return Singleton.singleton5;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值