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

时间:2021-02-22 20:47:31

单例设计模式的最主要目的是:保证一个类在内存中只能有一个对象,节省内存空间,当需要频繁创建和销毁的对象时单例模式无疑可以提高系统的性能。

设计思想:

1)如果其他程序能够随意用 new 创建该类对象,那么就无法控制个数。因此,不让其他程序用 new 创建该类的对象。于是做法就是:定义私有的构造方法

2)既然不让其他程序 new 该类对象,那么该类在自己内部就要创建一个对象,否则该类就永远无法创建对象了。于是做法就是:定义私有静态常量属性(实例化出来的对象),特征为静态是想类在初始化时就加载出来了

3)该类将创建的对象对外(整个系统)提供使用,让其他程序获取并使用。于是做法就是:公有静态方法返回实例化出来的对象,特征为静态是想类在初始化时就加载出来了

三步骤:

1.定义私有的构造方法

2.定义私有静态常量属性(实例化出来的对象),特征为静态是想类在初始化时就加载出来了

3.公有静态方法返回实例化出来的对象,即暴露给别人调用

饿汉式:

就好比你饿了,我提前做好吃的(new出来的对象)给你,你来了直接就可以拿去“吃”了

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

懒汉式

(要是有人问单例的延迟加载方式指的就是这种方式)

一开始我就不给你 new 对象,你来找我,我在给你创建一个对象

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

懒汉式有一个缺点,就是在多线程中使用的时候,可能会创建多个实例对象,比如,线程1来调用 getInstance() 方法,判断了 s==null,然后线程1由于未知的原因阻塞了,线程2再来调用 getInstance() 方法,判断 s==null ,线程2就创建了一个对象,这时候线程1又运行了,那么线程1就会创建一个对象~这样就会造成多个对象~

懒汉式的线程优化——加一个锁

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

饿汉式和懒汉式的区别:

1)饿汉式是空间换时间,懒汉式是空间换时间。

2)在多线程访问的时候,懒汉式可能会创建多个对象,而饿汉式不会。