单例模式是编程开发二十三种设计模式中最基础的一种设计模式,也是学习设计模式的入门知识。何谓单例模式,顾名思义只允许有一个实例。用编程的行话说,在程序运行的过程中,某一个类只能有一个对象存活在内存中,其它程序不能随意的new出来一个该类的对象。单例模式正是实现了这个需求,实现思路是该类在自己内部创建一个对象,其它程序无法创建该类的对象。该类创建的对象向整个系统提供,其它程序可以获取到这个对象并且使用。单例模式的实现一般有两种方案:懒汉模式和饿汉模式。

懒汉模式

该类向外提供一个可以获取该类对象的静态方法,其它程序调用这个方法的时候,系统会判断内存中是否存在该类的对象,如果存在则返回该类的对象,如果不存在则创建一个新的该类对象。通俗的讲,就是一开始并不创建对象,当其它程序需要使用该对象的时候再创建。

懒汉模式的代码实现如下:

Java懒汉和饿汉单例模式如何实现?

饿汉模式

饿汉模式是在程序启动或者该类被系统加载的时候,就会创建一个该类的对象,别的程序如果需要使用该类的对象,直接来拿就好了。简单的来说,饿汉模式是一劳永逸的。饿汉模式的代码实现如下:

Java懒汉和饿汉单例模式如何实现?

饿汉模式和懒汉模式的区别

  1. 饿汉模式是空间换时间,一开始创建的对象可能其它程序用不到,这样就会一直占用着内存。懒汉模式是时间换空间,懒汉模式在需要的时候才去创建,有点“临阵磨枪”的意思,会造成程序运行时间较长(其实差别是毫秒级的,但是做开发一定要严谨)。

  2. 懒汉模式线程不安全,当多线程调用的时候,需要加上同步锁,这样会大大影响程序的运行效率。饿汉模式是线程安全的,一劳永逸,程序运行效率要比懒汉模式高。