public class SingletonDesignPattern {
public static void main(String[] args) {
Singleton4 singleton = Singleton4.getInstance();
Singleton4 singleton1 = Singleton4.getInstance();
System.out.println(singleton == singleton1);
}
}
class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return singleton;
}
}
class Singleton1 {
private static Singleton1 singleton;
private Singleton1() {
}
public static Singleton1 getInstance() {
if (singleton == null) {
singleton = new Singleton1();
}
return singleton;
}
}
class Singleton2 {
private static volatile Singleton2 singleton;
private Singleton2() {
}
public static Singleton2 getInstance() {
if (singleton == null) {
synchronized (Singleton2.class) {
if (singleton == null) {
singleton = new Singleton2();
}
}
}
return singleton;
}
}
class Singleton3 {
private Singleton3() {
}
private static class SingletonInner {
public static Singleton3 singleton = new Singleton3();
}
public static Singleton3 getInstance() {
return SingletonInner.singleton;
}
}
class Singleton4 {
private Singleton4() {
}
enum SingletonEnum {
INSTANCE;
private Singleton4 singleton4;
SingletonEnum() {
singleton4 = new Singleton4();
}
public Singleton4 instance() {
return singleton4;
}
}
public static Singleton4 getInstance() {
return SingletonEnum.INSTANCE.instance();
}
}