Chapter 73. Resist the Temptation of the Singleton Pattern
THE SINGLETON PATTERN SOLVES MANY OF YOUR PROBLEMS. You know that you only need a single instance. You have a guarantee that this instance is initialized before itâs used. It keeps your design simple by having a global access point. Itâs all good. Whatâs not to like about this classic design pattern?
Quite a lot, it turns out. Tempting they may be, but experience shows that most singletons really do more harm than good. They hinder testability and harm maintainability. Unfortunately, this additional wisdom is not as widespread as it should be, and singletons continue to be irresistible to many programmers. But they are worth resisting:
The single-instance requirement is often imagined. In many cases, itâs pure speculation that no additional instances will be needed in the future. Broadcasting such speculative properties across an applicationâs design is bound to cause pain at some point. Requirements will change. Good design embraces this. Singletons donât.
Singletons cause implicit dependencies between conceptually independent units of code. This is problematic both because they are hidden and because they introduce unnecessary coupling between units. This code smell becomes pungent when you try to write unit tests, which depend on loose coupling and the ability to selectively substitute a mock implementation ...
Get 97 Things Every Programmer Should Know now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.