Singleton Design Pattern in Swift

1. Definition

The Singleton Design Pattern ensures a class has only one instance and provides a point to access this instance throughout the application.

2. Problem Statement

In certain scenarios, it's crucial to ensure that a class has only one instance. Multiple instances could cause inconsistent results, overuse of resources, or synchronization issues.

3. Solution

To solve the problem, the Singleton pattern restricts instantiation of the class to one object. This can be achieved by:

1. Making the constructor private.

2. Providing a static method that controls the instance creation process and returns the sole instance.

4. Real-World Use Cases

1. Managing a shared resource, like configuration settings.

2. Database connections where a shared single connection pool is used to avoid the overhead of establishing a new connection for every request.

3. Logger systems where logs from different parts of an application need to be written into a single file.

5. Implementation Steps

1. Declare a private static instance of the same class.

2. Make the constructor private to prevent usage of the init outside the class.

3. Provide a public static method to get the instance of the class.

6. Implementation in Swift Programming

class Singleton {
    // Step 1: Declare a private static instance of the same class.
    private static var sharedInstance: Singleton?
    // Step 2: Make the constructor private.
    private init() { }
    // Step 3: Provide a public static method to get the instance of the class.
    public static func getInstance() -> Singleton {
        if sharedInstance == nil {
            sharedInstance = Singleton()
        }
        return sharedInstance!
    }
}
// Testing the Singleton
let instance1 = Singleton.getInstance()
let instance2 = Singleton.getInstance()
print(instance1 === instance2) // This will print true, showing both instances are the same.

Output:

true

Explanation:

1. Singleton class ensures that it can't be instantiated from outside because of its private constructor.

2. It provides a getInstance method which ensures that only one instance of the class is ever created. If the instance is not created, it initializes and then returns it. Otherwise, it simply returns the existing instance.

3. In the testing section, we retrieve two instances, instance1 and instance2, using the getInstance method. Comparing these two instances with the identity operator (===) confirms that they reference the same Singleton object.

7. When to use?

Use the Singleton pattern when:

1. A class in your program should just have a single instance available to all clients; for example, a single database object shared by different parts of the program.

2. You want to restrict instantiation of a class to one object.

3. The single instance should be extendable by subclassing, and clients should be able to use an extended instance without modifying the code.


Comments