单例设计模式
什么是单例设计模式
-
所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个实例对象,并且该类只提供一个取得其对象实例的方法。
-
单例模式有两种方式:(1)饿汉式 (2)懒汉式
单例(单个的实例)
一、 饿汉式
不管程序是否需要这个对象的实例,总是在类加载的时候就先创建好实例,理解起来就像不管一个人想不想吃东西都把吃的先买好,如同饿怕了一样。
步骤:
-
构造器私有化 —>防止直接new
-
类的内部创建对象
-
向外暴露一个静态的公共方法。
-
代码实现
二、懒汉式
如果一个对象使用频率不高,占用内存还特别大,明显就不合适用饿汉式了,这时就需要一种懒加载的思想,当程序需要这个实例的时候才去创建对象,就如同一个人懒的饿到不行了才去吃东西。
步骤:
-
构造器仍然私有化
-
定义一个static静态属性对象
-
提供一个public的static方法,可以返回一个Cat对象
-
懒汉式,只有当用户使用getInstance()时,才返回cat对象,后面再次调用时,会返回上次创建的cat对象//从而保证了单例
三、饿汉式 VS 懒汉式
- 二者最主要的区别在于创建对象的时机不同:饿汉式是在类加载就创建了对象实例,而懒汉式是在使用时才创建。
- 饿汉式不存在线程安全问题,懒汉式存在线程安全问题。
- 饿汉式存在浪费资源的可能。因为如果一个对象实例都没有使用,那么饿汉式创建的对象就浪费了,懒汉式使使用时才创建,就不存在这个问题。
- 在JavaSE标准类中,java.lang.Runtime就是经典的单例模式。