Singleton Design Pattern in Java

Singleton makes sure a class has only one object. Everyone in the program uses that same object.

Real life example

A country has only one president. Everybody talks to the same person.

When to use

You need exactly one shared object, such as a logger, app settings or a database connection.

Complete Java example

Save this as Main.java, then run javac Main.java and java Main.

public class Main {
    public static void main(String[] args) {
        Logger a = Logger.getInstance();
        Logger b = Logger.getInstance();
        System.out.println(a == b);                // true, same object
        // Tip: for multi-threading, use an enum: enum Logger { INSTANCE }
    }
}

class Logger {
    private static Logger instance;        // the only object
    private Logger() {}                    // nobody can write new Logger()

    public static Logger getInstance() {
        if (instance == null) {
            instance = new Logger();       // created only the first time
        }
        return instance;
    }
    void log(String msg) { System.out.println("LOG: " + msg); }
}

Output

true