Utilizando el método clone, podemos conseguir muchas instancias de una clase que se ha hecho Singleton?
Además, es necesario escribir "implementos Cloneable" porque he aprendido que todos los objetos se extienden desde la clase de objeto y por lo tanto el objeto secundario llamando protegida clon () en otro niño de objetos no debería tener problemas de acceso
No va a suceder hasta que implemente Cloneable
por su Singleton (que es un anti-patrón, ya que contradice el propósito mismo de Singleton). Por lo tanto, sólo puede ocurrir si haces algo como esto:
SomeClass.java
class SomeClass implements Cloneable {
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
Singleton.java
class Singleton extends SomeClass {
public static Singleton instance = new Singleton();
private Singleton() {}
}
Main.java
class Main {
public static void main(String[] args) throws CloneNotSupportedException {
Singleton singleton1 = Singleton.instance;
Singleton singleton2 = singleton1.clone();
System.out.println("singleton1 : "
+ singleton1.hashCode());
System.out.println("singleton2 : "
+ singleton2.hashCode());
}
}
Salida
singleton1: 445884362
singleton2: 1793329556
Incluso esto, en este caso, puede resolver este problema reemplazando clone
en Singleton
y lanzar una excepción.