反模式

如果模式代表了最佳实践,那么反模式就代表经验教训,或者用Andrew Koenig)的话来说:“对于问题的糟糕描述,导致了糟糕的解决方案。”如果仔细阅读并发模式的文献,就会看到双重检查锁定模式。双重检查锁定模式的基本思想,简言之,以优化的方式对共享状态进行线程安全初始化,这种共享状态通常是单例。我将双重检查锁定模式放在本书的案例研究一章中,以明确强调:使用双重检查锁定模式可能会导致未定义行为。双重检查锁定模式的问题,本质上可以归结为单例模式的问题。

如果使用单例模式,必须考虑以下挑战:

  • 单例对象是一个全局对象。基于这个事实,单例的使用在(大多数情况下)接口中是不可见的。其结果是在使用单例的代码中隐藏了一个依赖项。
  • 单例对象是静态的,因此一旦创建就不会被销毁。它的生命周期和程序的生命周期相同。
  • 如果类的静态成员(如单例)依赖于在另一个单元中定义的静态成员,则不能保证先初始化哪个静态成员,那么每个静态成员初始化失败的概率是50%。
  • 当类的实例可以完成任务时,通常会使用单例。许多开发者使用单例来证明自己了解设计模式。