Singleton

A restricted class only instantiating one object

Contents

Example of Uses

  • UI (window manager)
  • Service locator
  • Logging
  • Configuration Classes

Intent

  • only one instance of a class is created
  • provide a global point of access to the object

Implementation

Lazy initialization

public class Singleton {
private static volatile Singleton instance = null;

private Singleton() { }

public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) instance = new Singleton();
}
}
return instance;
}
}

Eager initialization

public class Singleton {
private static final Singleton INSTANCE = new Singleton();

private Singleton() {}

public static Singleton getInstance() {
return INSTANCE;
}
}

Static block initialization

public class Singleton {
private static final Singleton instance;

static {
try {
instance = new Singleton();
} catch (Exception e) {
throw new RuntimeException("Error occurred!", e);
}
}

private Singleton() {}

public static Singleton getInstance() {
return instance;
}
}

Initialization On Demand Holder Idiom

public class Singleton {
private Singleton() {}

private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}

public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}

The Enum way

public enum Singleton {
INSTANCE;
public void execute (String arg) {}
}

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.