Java 设计模式 -- 单例模式

设计模式是前辈们在多年开发工作中经验的总结,可以提高代码的可重用性、可靠性和规范性,让代码更容易理解,而单例模式是在Java中最重要、最简单、最常用的设计模式之一。

单例模式

通俗来说,单例模式就是某个类中持有对自己唯一的对象,并且只能通过外部接口访问的一个类。看起来有有点拗口,那就直接上代码吧。

单例模式有两种:懒汉模式、饿汉模式
饿汉模式构建思路:
  • 创建一个该类的私有、静态成员变量并进行初始化
  • 重写无参构造函数,修饰符改为私有
  • 提供 getInstance() 方法供外部获取该类的实例

具体代码如下:

/**
 * 饿汉模式
 * 
 * @author huaian
 */
class HungrySingleton {

    /**
     * 1. 创建此类的private static成员变量,并进行初始化
     */
    private static final HungrySingleton instance = new HungrySingleton();

    /**
     * 2. 构造方法私有化,不允许外部直接创建对象
     * 避免外部创建多个实例
     */
    private HungrySingleton(){
    }

    /**
     * 3. 提供外部接口访问当前单例
     * @return instance 
     */
    public static HungrySingleton getInstance() {
        return instance;
    }
}
懒汉模式构建思路:
  • 创建此类的私有、静态成员变量(不进行初始化)
  • 重写该类的无参构造函数,修饰符为 private
  • 提供一个外部方法获取该类对象(此时需要初始化成员变量)

代码实现如下:

/**
 * 懒汉单例
 * 
 * @author huaian
 */
public class LazySingleton {

    // 1. 构造方法私有化 ,不允许外界直接创建对象
    private static LazySingleton instance;

    // 2. 创建 private static 的对象实例,不进行初始化
    private LazySingleton() {
    }

    // 3. 提供一个外部方法获取该对象实例(此时初始化对象)
    public static LazySingleton getInstance() {
    	// 实例化对象
        if (instance == null ){
            instance = new LazySingleton();
        }
        return instance;
    }
}
小结
  • 相同点

无论是懒汉模式还是饿汉模式,其核心思想都是不变的:不允许外界直接创建该类的实例,只能通过提供的 getInstance() 方法获取该类对象。

  • 不同点
  1. 两者最大的差别还是该类内部的实例什么时候初始化。于是乎,方便记忆,可以这样理解:懒汉模式比较懒,所以需要用到的时候才会初始化该类的实例。反之就是饿汉模式(饿汉比较饿,所以急,类加载时就创建了实例对象)。
  2. 对于上述例子,饿汉模式是线程安全的,懒汉模式是线程不安全的。
  3. 第一点中提到,最大的区别是不用时间点实例化对象。那么这就决定了两种模式的效率(见下表格,效率是两种模式相对而言)。
    设计模式类加载效率获取对象实例效率
    懒汉模式
    饿汉模式

人若无名,专心练剑!
喜欢的朋友可以留下你的赞!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值