What Everyone Ought to Know About Singelton design pattern
Tags: beginners, programming, designpatterns, design
Published: 2023-03-02 04:10:26

## Singleton Pattern

- Singleton Pattern says that just "define a class that has only one instance and provides a global point of access to it".


![UML of Singleton design pattern](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c9xy2lbmmmfzzvkshp1m.jpg)

- The above image depicts the UML of Singleton design pattern

## UML - Unified Modeling Language

- Popular for diagrammatic notation.

- For Visualization, to understand & remember.

- In UML, first block is considered as the class, second block is considered as Attributes & third block is considered as Methods

- Signs used such as +, -, # have certain meaning. They will tell which Access modifier is being used.

1. (+) - Public

2. (-) - Private

3. (#) - Protected

## Steps to create Singleton design pattern

- **Through constructor the client can create many objects of a class**

- So make the constructor as private.

- **Now, how do we get the instance of the class**

- Create getInstance method which checks if instance is null or not. If instance is not null, return the same instance or call the constructor to create new instance.


- **Now how the client can call this method? because methods are called by objects**

- Client doesn't have object, so no access to constructor. Use static keyword. We do not need instance of the class if we use static.



![Code walkthrough of Singleton design pattern] (https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qwi39cn0d53yuruioxcg.PNG)


## What is Multithreading and how to handle Multiple threads

- In main method, do mistake purposefully in System.out.println we will see error exception in thread main which means main is a thread & by running it we are getting the error.

- Normally code runs line by line but if we want 2 things to run simultaneously, then it will be multithreading.

- Do Ctrl + Shift + Escape, you will get Task manager go to performance tab in that We can view how many cores are there & in each core 2 threads can be run. So Logical processors = 2 * Cores.

- At a time only (Logical processors = 2 * Cores) threads can be run.

- In Task manager We will see thousands of threads working at a time. But the (Logical processors = 2 * Cores) threads will take turns & switch within microseconds. That is why we see thousand of threads in numbers.

![Task Manager - Performance](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8fqopn4zmv7fzwclb672.PNG)


## **Why we are handling Mutiple threads in Singleton design pattern**

- If 2 threads access the getInstance method, both threads will check if instance is null or not. To both of them instance will be null and each thread will create one obecjt.

- But our objective in Singleton design pattern is to create one object and use it for all instances. So to avoid this we will use synchronized key word.

- To handle multiple threads we will be using **synchronized** key word. What it does is it will lock the operation until one thread operation is completed. So that multiple threads can not use a method at a time.


![Handling Multiple threads in Singleton design pattern ](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hwafl8l20ten2mlk7whn.PNG)

- In above image we can view we made the getInstance method synchronized so that multiple threads can not access it at the same time

## Cons of Singleton design pattern

- Should be handled carefully in Multithreaded environment

                       Happy Reading