09 singleton单例模式(创建型)
09 singleton(创建型)
-
- 为什么我们需要独一无二的对象?
- 线程池
- 打印机
- Caches
- 注册表
- 比如太阳、月亮
- 单例模式:一个类只能被实例化一次
- 什么时候用:
- 一个类必须只有一个实例,并且它必须能够从一个众所周知的接入点对客户端进行访问。
- 当唯一的实例应该通过子类化来扩展时,客户端应该能够在不修改其代码的情况下使用扩展实例。
- 好处:
- 对唯一实例的受控访问。
- 允许实例数量可变。该模式使允许单例类的多个实例变得容易。您可以使用相同的方法来控制应用程序使用的实例数量。
- 比静态类(具有所有静态属性和方法的类)更灵活。
- 静态类必须是无状态的;单例可能是有状态的
- 实现:
- 使用静态static方法允许客户机获得对单个实例的引用。
- 使用私有private构造函数。
- Eager singleton:(private static)
- 有可能不要单例的话,他自己创建就浪费了
- Lazy singleton:
- 为什么我们需要独一无二的对象?
-
- 当单例被创建后,每次获得单例仍需要同步,效率低
-
- 标准解答:
- 保证第一次创建时用synchronized,而后就不用同步了
- 标准解答: