简介:
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
应用场景:
1、Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。
2、一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。
设计原则:
- 单例类只能有一个实例。
- 单例类必须自己创建自己的唯一实例,创建方法必须为static private方法。
- 单例类必须给所有其他对象提供这一实例,提供方法为static。
注意事项:
- 保证创建的实例为单一化实例——需要保证线程安全
- 保证lazy初始化(延迟加载)——防止在虚拟机加载类时初始化,将初始化时间延迟到调用getInstance。
几种实例 :
1.饿汉式:
- 是否lazy初始化:否
- 是否线程安全:是
2. 懒汉式
- 是否lazy初始化:是
- 是否线程安全:否
3.懒汉式(线程安全版本)
4.双重加锁式(Synchroized + volatile)
- 是否lazy初始化:是
- 是否线程安全:是
5.静态内部类式(利用初始化锁)
- 是否lazy初始化:是
- 是否线程安全:是
6.枚举式
- 是否lazy初始化:是
- 是否线程安全:是