UML
实现方式
- 静态属性
也称为饿汉模式,类加载的时候就生成对象,虽然避免线程安全问题,但是这样也耗费内存
- 普通方法获得单例
无法在多线程的时候保证安全性
- 带Synchronized的方法
可以保障安全性,但是重量级,效率不高
- 双重检验
只在new 对象的时候加带Synchronized锁
- 静态内部类
静态内部类兼具安全性和节省内存,静态内部类只会在使用的时候初始化
- 枚举类
也属于饿汉式
破坏单例模式
- 反射机制
- 反序列化
相关的设计模式
- 原型模式
原型,亦称为克隆,与单例模式的区别就是虽然字段都相同但是原型模式下,是不同的对象,而单例是同一个。
- 享元模式 单例模式和享元模式都是为了避免重复创建对象,但是其本质是不一样的:其实现方式不一样,单例是一个类只有一个唯一的实例,而享元可以有多个实例,只是通过一个共享容器来存储不同的对象。 其使用场景不一样,单例是强调减少实例化提升性能,因此一般用于一些需要频繁创建和销毁实例化对象或创建和销毁实例化对象非常消耗资源的类中,如连接池、线程池。而享元则是强调共享相同对象或对象属性,节约内存使用空间。