知识卡片

单例模式的三个代价

普通读书笔记卡 · 1984.b

内容

[[单例模式的定义与实现要点]]的代价有三点:几乎无法通过接口扩展(接口意义在于可替换,与 单例”自行实例化”矛盾);不利于测试(没有接口无法Mock先行测试依赖它的代码);与单一职责 原则有张力(”是否单例”是部署决策,却被硬编码进类内部)。发散:单例把”实例数量控制”这个 横切关注点缝进业务类内部,环境变化时迁移成本高。

参考来源

- 位置:《设计模式之禅(第2版)》第7章《单例模式》(源文件:_epub-src/text/part0030.html) - 结论依据:原文分三点列出单例模式的缺点:接口对单例无意义导致扩展困难、没有接口无法mock测试、"要单例"与业务逻辑耦合在一个类中构成与单一职责原则的冲突。 - 原始内容:单例模式一般没有接口,扩展很困难……单例模式对测试是不利的……单例模式与单一职责原则有冲突。一个类应该只实现一个逻辑,而不关心它是否是单例的,是不是要单例取决于环境,单例模式把"要单例"和业务逻辑融合在一个类中。