要求: 写一个java单例,类外部的代码无法创建其实例对象(反射机制也不能),即无法通过反射机制破坏单例的“唯一性”
【方案一】:
interface Allowed{
//用以定义允许单例类外部使用的接口:
void allowedOperation();
}
public class SafeSingletonShell{
/*
* 单例类的保护壳,用来防止通过反射机制破坏单例的“单”原则
*/
public static Allowed OnlyGiveWhatIWantTo(){
return RealSingleTon.instance;
}
public static Allowed getInstance() {
return OnlyGiveWhatIWantTo();
}
private static class RealSingleTon implements Allowed{
private static RealSingleTon instance = new RealSingleTon();
@Override
public void allowedOperation() {
// do some operation here:
System.out.println("safe op");
}
public void notAllowedOperation() {
// codes outside WeirdSingleton can not see
System.out.println("unsafe op");
}
public RealSingleTon getInstance() {
return instance;
}
}
}