Java基础巩固系列 设计模式——单例模式(饿汉式与懒汉式)

本文介绍了设计模式中的单例模式,并提供了饿汉式和懒汉式的具体实现案例,深入探讨了不同实现方式的特点及其可能遇到的问题。

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

什么是设计模式?

设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。(有23种设计模式)

 

 饿汉式1单例模式代码示例:

/*
 * 单例的设计模式:
 * 1.解决的问题:使得一个类只能够创建一个对象。
 * 2.如何实现?见如下的4步
 * */
public class TestSingleton {
    public static void main(String[] args) {
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s1 == s2);
    }
}

//只能创建Singleton的单个实例
class Singleton {

    //1.私有化构造器,使得类的外部不能够调用此构造器
    private Singleton() {

    }

    //2.在类的内部创建一个类的实例
    private static Singleton instance = new Singleton();

    //3.私有化此对象,通过公共方法来调用
    //4.此公共的方法,只能通过类来调用,因为设置为static的,同时类的实例也必须为static声明的
    public static Singleton getInstance() {
        return instance;
    }
}

结果:

com.peter.java8.Singleton@6d6f6e28
com.peter.java8.Singleton@6d6f6e28
true

 

 饿汉式2单例模式代码示例:

public class TestSingleton {
    public static void main(String[] args) {
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s1 == s2);
    }
}


class Singleton {

    private Singleton() {

    }

    private static Singleton instance = null;

    //区别在代码块
    static{
        instance = new Singleton();
    }
   
    public static Singleton getInstance() {
        return instance;
    }
}

结果:

com.peter.java8.Singleton@6d6f6e28
com.peter.java8.Singleton@6d6f6e28
true

 

懒汉式单例模式代码示例(可能存在线程安全问题):

 

//懒汉式:可能存在线程安全问题
public class TestSingleton1 {
    public static void main(String[] args) {
        Singleton1 s1 =Singleton1.getInstance();
        Singleton1 s2 =Singleton1.getInstance();
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s1 == s2);
    }
}

class Singleton1{

    private Singleton1(){

    }

    private static Singleton1 instance = null;

    public static Singleton1 getInstance(){
        if (instance == null){
            instance = new Singleton1();
        }
        return instance;
    }
}

结果:

com.peter.java8.Singleton1@6d6f6e28
com.peter.java8.Singleton1@6d6f6e28
true

 

懒汉式存在线程安全的说明图:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值