1.定义:

确保一个类最多只有一个实例,并提供一个全局访问点

2.有几种方式

  • 饿汉式(静态常量):在类装载时就实例化,可能造成内存浪费

设计模式学习-单例模式_设计模式

 

 

  • 饿汉式(静态代码块)

设计模式学习-单例模式_单例模式_02

 

 

  • 懒汉式(线程不安全):if语句块问题,实际开发中不要使用这种方式设计模式学习-单例模式_设计模式_03

     

     

  • 懒汉式(线程安全,同步方法):同步效率太低,不推荐使用设计模式学习-单例模式_单例模式_04

     

     

  • 双重检查 :推荐使用

     

     设计模式学习-单例模式_单例模式_05

     

     

  • 静态内部类:静态内部类会在调用getInstance后加载,且只加载一次;通过JVM来保证线程的安全性,推荐使用

    设计模式学习-单例模式_单例模式_06

 

 

  • 枚举:effective Java推荐使用

  设计模式学习-单例模式_单例模式_07

 

 单元素的枚举类型已经成为实现Singleton的最佳方法
                                                                                                  -- 出自 《effective java》