Search⌘ K
AI Features

Singleton Pattern

Explore how the Singleton pattern applies in Node.js to ensure only one instance of a class exists within an application. Learn about its typical use cases, such as shared state and resource optimization, and understand common limitations due to module caching and package versioning. This lesson helps you grasp practical implementation and caveats of singletons in Node.js development.

We'll cover the following...

Now, we’re going to spend a few words on a pattern that’s among the most used in object-oriented programming, which is the Singleton pattern. As we’ll see, Singleton is one of those patterns that has a trivial implementation in Node.js that’s almost not worth discussing. However, there are a few caveats and limitations that every good Node.js developer should know.
The purpose of the Singleton pattern is to enforce the presence of only one instance of a class and centralize its access. There are a few reasons for using a single instance across all the components of an application:

  • For sharing stateful information

  • For optimizing resource usage

  • To synchronize access to a resource

These are some really common scenarios.

Example

Take, for example, a typical Database class, which provides access to a database.

// 'Database.js'
export class Database {
constructor (dbName, connectionDetails) {
// ...
}
// ...
}

Typical implementations of such a class usually keep a pool of database connections, so it doesn’t make sense to create a new Database instance for each request. Plus, a Database instance may store some stateful information, such as the list of pending transactions. So, our Database class meets two criteria for justifying the Singleton pattern. Therefore, ...