Shared State
Learn about the shared state design pattern, which is a replacement to the singleton pattern.
Rather than forcing our design to have a singleton in which only one instance is created, no matter how the object is invoked, constructed, or initialized, it is better to replicate the data across multiple instances.
The monostate pattern
The idea of the monostate pattern is that we can have many instances that are just regular objects, without having to care whether they're singletons or not (seeing as they're just objects). The good thing about this pattern is that these objects will have their information synchronized, in a completely transparent way, without us having to worry about how this works internally.
This makes this pattern a much better choice, not only for its convenience, but also because it is less error-prone, and suffers from ...