Java单例设计模式(懒汉式与饿汉式)

在Java中一共有23种设计模式,今天来讲一讲相对简单的一种设计模式——单例设计模式。

在这里要首先理解一下什么是单例。

单例的概念

在Java中,对象也被称为是实例,所以在这里的“例”说的就是对象的问题,即以下特点:

       1、单例类只能有一个实例。
  2、单例类必须自己创建自己的唯一实例。
  3、单例类必须给所有其他对象提供这一实例。

所以可以看出,单例设计模式的一个最大特点,也就是只有一个对象可以被外部访问到,那么这就有了它的一个大致用法,当外部需要调用时,每一次得到的都是同一个对象,数据只能存在一份,这就保证了数据的唯一性。可以较大程度上阻止外部外部的不一致状态。

单例的代码实现思路

说完了概念,那接下来就该从概念入手,开始进行代码的实现了,这里建议初学者自己进行思考,先不要看下边的思路与代码,思考结束后再进行综合对比。

对于Java来说,创建一个对象需要的是使用构造方法,那为了确保外部只能拿到一个对象,那必然不能让外部获取到构造方法,否则会导致外部可以随意创建对象,也就会影响所谓的单例。

那为了让外部获取不到构造方法,我们需要把构造方法私有化,从而让我们在类的内部进行创建对象,并且把创建的对象也要私有化,否则外部把对象修改为null的时候,有可能会被Java垃圾回收系统回收,使类中没有对象,外部都无法获取。

除此之外,既然对象成了私有的,那就需要一个公开的方法去返回这个对象,让外部获取这个对象。但是又有一个新的问题出现了,没有对象,我们该如何去调用方法,这时候就该想到一点,静态方法,静态方法的调用可以使用类名来调用,那就可以使用静态方法来返回对象,从而让外部获取唯一的对象。

单例的两种常用写法

懒汉式(Lazy Singleton)

懒汉式之所以被称之为"懒",就是在于它的创建对象是相比于另一个要晚,只有在调用方法时才会创建对象,这样的好处就是占用空间晚,但是效率低。以下是代码实现

public class Singleton {
    private Singleton() {}
    private static Singleton single=null;
    public static Singleton getInstance() {
         if (single == null) {  
             single = new Singleton();
         }  
        return single;
    }
}

饿汉式(Eager Singleton)

饿汉式的"饿"体现在它的创建对象的先后上,懒汉式是后创建对象,但是饿汉式是一开始就创建了对象,从而体现它的“饿”,以下是代码实现


public class Singleton1 {
    private Singleton1() {}
    private static final Singleton1 single = new Singleton1();
    public static Singleton1 getInstance() {
        return single;
    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值