Skip to main content

What is singleton design pattern?

Singleton design pattern

Image result for singleton design pattern
Singelton Design Pattern.

 The singleton design pattern is a software design pattern which ensures that a class of anyone object has only one instance (of computer science). In other words, we can also say that it restricts the instantiation of a class of any object. We require a singleton pattern because it may sometimes happen that we require only one object to coordinate with the action across the system. This concept is also applicable when we have to restrict instantiation over a number of objects.


The singleton pattern helps us to solve problems like:
  • Helps to ensure that a class has one instance.
  • Helps to access the sole instance of a class easily.
  • Helps to a class to control its instantiation.
  • Helps to restrict a number of instances of a class.
Now, you might be thinking about how to solve such problems. Here are a few key points which might help you:
  • The first key point is to make a class which is responsible by itself for controlling its instantiations.
  • The second point is to hide the constructor (those objects which are created from classes by subroutines) of a class. This is important to do because by doing this you declare privacy that ensures the class would never be instantiated from outside of the class.
  • The last point is to define a public static operation (for eg. , getInstance()) as this would return the sole instance of the class and is also easily accessible by using class name and operation name.
Another question might strike you when to use Singleton? Here is the answer to that, you need to use Singleton when you find that these criteria mentioned below are satisfying:
  • There must be ownership of a single instance.
  • There is no provision of global access.
  • And there is lazy initialization (kind of lazy evaluation of instantiation of objects/classes).
Abstract factory, builder and prototype pattern use singleton pattern for their implementations. State objects and façade objects are also singletons. The reason behind why Singleton patterns are more preferable than compared to global variables is that while using Singleton pattern at that time you are sure enough how many numbers of instances you are working with and you can change your mind and manage any number of instances you want to.
 The java class that allows us to create one object per JVM is called a singleton java class.
 E.g
 The Logger class of the Log4j API is given as singleton java class.

 Rules
 To create the singleton class, we need to have the following things.
 1. Static member
 It gets memory only once because of static, it contains the instance of the Singleton class.
 2. Private constructor
 It will prevent to instantiate the Singleton class from outside the class.
 3. Static factory method
 This provides the global point of access to the Singleton object and returns the instance to the caller.

Here is the syntax of Singleton implementation in two very known languages Java 
Singleton implementation in Java
  1. public final class Singleton
  2. {
  3. private static final Singleton INSTANCE = new Singleton();
  4. private Singleton() {}
  5. public static Singleton getInstance() {
  6. return INSTANCE;
  7. }
  8. }

Comments

Popular posts from this blog

Dealing with Passwords in Java Applications: 5 Best Practices You Should Follow

 In modern Java applications—whether core Java applications or enterprise-level web applications—working with passwords is inevitable. Passwords are sensitive pieces of information, just like Social Security Numbers (SSNs), and if you’re handling real human data in systems such as online banking or healthcare portals, it’s critical to implement best practices for dealing with passwords securely. Below, I’ll share five essential best practices that I’ve learned and recommend for managing passwords, particularly when you are handling authentication and authorization. While these tips are a good starting point, be sure to tailor them to your application’s requirements and security policies. 1) Use SSL/TLS to Transfer Username and Password When users send passwords over the network, it is crucial to use SSL/TLS to encrypt the communication. This ensures that sensitive information is protected from eavesdroppers. Tools like LDAP and Active Directory are commonly used for storing usern...

New Features in Java 11

  Java 11 introduced several new features and enhancements. Here are some notable features with examples: Local-Variable Syntax for Lambda Parameters: Java 11 allows var to be used in lambda parameters, which provides improved readability and conciseness. Example: java // Before Java 11   someList.forEach((String item) -> { System.out.println(item); }); // With Java 11   someList.forEach(( var item) -> { System.out.println(item); }) HTTP Client (Standard API): Java 11 introduced a new HTTP client API as a replacement for the deprecated HttpURLConnection . It provides a more modern and flexible way to send HTTP requests and handle responses. Example import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; public class HttpClientExample { public static void main (String[] args) throws Exception { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpReque...

How does a hash map work internally in Java?

Hash map work internally in Java Basically, HashMap is an array of Entry class, a static inner class defined in HashMap is as below: static class Entry implements Map. Entry  { final K key; V value; Entry next; final int hash; //getters and setters } Each element in Hashmap stores in it a key, its value, a reference to next entry in case hash value is the same for two entries, in that case, a linked list will be formed. Default initial capacity of a HashMap is 16 i.e a HashMap is initialized with a default 16 sized array. Now, let us see what happens when we put an element into HashMap. Following is the code for put method in hashmap: public V put(K key, V value) { if (key == null) return putForNullKey(value); int hash = hash(key.hashCode()); int i = indexFor(hash, table.length); for (Entry e = table[i]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e....