单例模式之饿汉式和懒汉式详细讲解

Java单例模式:饿汉式与懒汉式解析
设计模式是优选的代码结构和解决问题的思考方式,单例模式确保类只有一个实例。饿汉式在类加载时就创建单例,线程安全但可能导致资源浪费;懒汉式则在首次使用时创建,延迟加载,但线程不安全。

设计模式

设计模式是在大量的实践中总结和理论化之后优选的代码结构,编程风格,以及解决问题的思考方式。就像经典的棋谱,不同的棋局,我们用不同的棋谱,“ 套路 ”。

单例模式

采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。

单例模式之饿汉式
public class SingletonTest1 {
    public static void main(String[] args) {
        //判断是否为一个对象
        Bank bank1 = Bank.getInstance();
        Bank bank2 = Bank.getInstance();
        System.out.println(bank1 == bank2);
        //打印结果为 true
    }
}

class Bank {

    //1.私有化构造器
    private Bank() {

    }
    //2.创建类的私有化对象(相当于类的属性)
    //4.静态方法中无法使用非静态结构,所以需要用static修饰
    private static Bank instance = new Bank();
    //3.创建get方法返回类对象
    /*getInstance 必须定义成 static 静态方法,
    因为getInstance 是用来创建对象的方法,不执行此方法就没有对象
    没有对象可以去调用此方法,就无法获得对象,陷入一个死胡同中
    只能通过静态方法 类.方法来调用getInstance 让它去创建对象
     */
    public static Bank getInstance() {
        return instance;
    }

}
单例模式之懒汉式
public class SingletonTest2 {
    public static void main(String[] args) {
        Order Order1 = Order.getInstance();
        Order Order2 = Order.getInstance();
        System.out.println(Order1 == Order2);
    }
}

class Order {
    //1.私有化构造器
    private Order() {

    }

    //2.声明类对象,不对其进行初始化
    private static Order instance = null;

    //3.创建getInstance方法返回对象
    public static Order getInstance() {
       /* instance = new Order();
        return instance;
        以上初始化返回对象方法有问题,若main方法多次调用getInstance方法
        ,每次调用会new一个新对象*/

        //所以需要判断instance值是否为null
        if (instance == null) {
            instance = new Order();
        }
        return instance;
    }
}

饿汉式一上来就把对象创建出来,不管你用不用,反正我给你创建了,比较饿。
懒汉式是你用我才创建,你不用我不创建,比较懒。

饿汉式和懒汉式的比较

饿汉式 :

​ 优点:线程安全的
​ 缺点:加载时间过长

懒汉式 :

​ 优点:延迟对象的创建
​ 缺点:线程不安全的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值