Here is the Sample program to break the traditional Singeton Design pattern using reflection API.
package com.dpatterns;
import
java.lang.reflect.Constructor;
public class SingleTon
{
private static SingleTon SINGLE_TON = null;
private SingleTon()
{
}
public static SingleTon
getSingletonInstance() {
if(SINGLE_TON == null){
SINGLE_TON = new SingleTon();
}
return SINGLE_TON;
}
public static void main( String[] args
)
{
for(int i = 0 ; i < 5 ; i++){
System.out.println("Same Instance:"+SingleTon.getSingletonInstance());
}
//Break the singleton .
System.out.println("Oops your singleton doesnt work any
more...");
Class<?> class1 = SingleTon.class;
Constructor<?>[] constructor =
class1.getDeclaredConstructors();
Constructor<?> constr = constructor[0];
constr.setAccessible(true);
for(int i = 0 ; i < 5 ; i++)
{
System.out.println("Different Instances: "+ new SingleTon());
}
}
}
Just copy the above code and run, you will same instances in first Sysout, and you will see different instances created using new operator in Second Sysout.
THANK YOU..