单利模式特点:
单例模式的要点有三个:
一是某个类只能有一个实例;
二是它必须自行创建这个实例;
三是它必须自行向整个系统提供这个实例。
从具体实现角度来说,就是以下三点:
一是单例模式的类只提供私有的构造函数,
二是类定义中含有一个该类的静态私有对象,
三是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。
为什么会出现完美单利?说明通常的单利有缺点,先来看看通常的3种单利
三种基本模式的单利:
1。懒汉模式
2。饿汉模式
3。登记者模式
饿汉模式
懒汉模式:
登记者模式:
总结一下:
饿汉式是典型的空间换时间,当类装载的时候就会创建类实例,不管你用不用,先创建出来,然后每次调用的时候,就不需要再判断了,节省了运行时间。但是占用了空间。
懒汉式是典型的时间换空间,也就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间。当然,如果一直没有人使用的话,那就不会创建实例,则节约内存空间。但是当多线程的时候会出现当线程1进入加载到一半的时候线程2进入,那么会有两个实例被创建。
登记式实际上维护了一组单例类的实例,将这些实例存放在一个Map(登记薄)中,对于已经登记过的实例,则从Map直接返回,对于没有登记的,则先登记,然后返回。首先它用的比较少,另外其实内部实现还是用的饿汉式单例,因为其中的static方法块,它的单例在类被装载的时候就被实例化了。
完美单利模式:静态内部类
既实现了线程安全,又避免了同步带来的性能影响。