单例模式:简单来说就是一个类只能构建一个对象实例的设计模式。

什么情况下适用单例模式?

         1. 频繁实例化然后销毁的情况

         2. 频繁访问IO资源如对数据库的连接池

         3. 创建耗时长但又经常访问的对象。

单例模式有哪几种实现方式?

       1. 静态内部类实现:定义一个 静态内部类,在里面创建该类的实例对象。 外部无法访问这个静态内部类,只能通过调用 类中的静态方法来得到该单例对                象。

                          线程安全的。用时才加载该类

       2. 饿汉模式:直接在类体中就创建实例对象,通过调用类中的静态方法来获取该实例

                         JVM层面的线程安全,造成了空间了浪费,不用判断就创建实例,如果不用这个实例就浪费了。

       3. 懒汉模式:真正需要的时候再创建 先创建一个引用指向null, 再在静态方法中是判断该引用是否为空,空的话创建类的实例,并将该引用指向该实例。

                         线程不安全,节省空间

       4. 双重检查模式:是在线程安全懒汉模式下改进的,  用 volatile关键字修饰 引用,再在静态方法中 synchronize锁住 类的class对象 再判断为空                                       再创建对象

                        线程安全, 但指令重排了

       5,枚举