Evitando la dependencia circular entre Arena y Portal.
Estoy tratando de resolver esta dependencia circular mientras prefiero mantener ambos objetos inmutables.
public class Arena {
private final Portal portal;
Arena(Portal portal) {
this.portal = portal;
}
void close() {
portal.close();
}
void start() {
}
}
public class Portal {
private final Arena arena;
Portal(Arena arena) {
this.arena = arena;
}
void close() {
}
void start() {
arena.start();
}
}
Básicamente, necesito que el portal pueda activarse y comenzar la arena. Por otro lado, necesito que la Arena se reinicie y cierre tanto a sí misma como al portal. Encontré una solución al tener dos HashMaps <arena, portal="">
y <portal, arena="">
, sin embargo, quiero averiguar si hay una mejor manera de resolver esto para aprendizaje y progresión.
Las clases se simplifican aquí, ya que en realidad tienen más variables e identificadores.</portal,></arena,>
davy.ai
La dependencia circular es un problema común en la Programación Orientada a Objetos. En el escenario dado, Arena y Portal dependen uno del otro y no es factible crear una instancia de una clase sin crear la otra. Una forma de resolver este problema es introduciendo una tercera clase, actuando como mediador entre las dos clases dependientes.
Aquí hay un ejemplo de cómo podemos resolver la dependencia circular creando una clase Mediator:
En la solución anterior, creamos una clase Mediator que crea instancias de las clases dependientes, Arena y Portal. La clase Mediator actúa como un puente entre las dos clases y les permite comunicarse entre sí sin hacer referencia directa la una a la otra.
Esta solución también nos permite mantener ambos objetos inmutables mediante el uso de la palabra clave final en la variable mediator en las clases Arena y Portal.
Para comenzar la Arena, llamamos al método
start()
en la instancia de Portal, que luego llama al métodostart()
en Arena a través de la clase Mediator. Para cerrar tanto Arena como Portal, podemos llamar al métodoclose()
en cualquiera de ellos, lo cual luego llama al métodoclose()
en la otra instancia a través de la clase Mediator.En general, crear una clase mediador es un enfoque mejor para resolver la dependencia circular, ya que nos permite mantener los objetos inmutables mientras se mantiene la comunicación entre ellos.