I would like to ask how you could solve a circular dependency:
This is the class design that I have:
Player class
public class Jugador{
private String id;
private String name;
private PowerJugador power;
public Jugador(String id, String name, PowerJugador power) {
this.id = id;
this.name = name;
this.power= power;
}
public Jugador(String id, String name) {
this.id = id;
this.name = name;
}
// Suponer Setters y Getters y ToString
Gremio Class
public class Gremio{
private String id;
private boolean abierto;
private PowerGremio power;
private Set<Jugador> miembros;
public Gremio(String id, boolean abierto,Set<Jugador> miembros, PowerGremio power) {
this.id = id;
this.abierto= abierto;
this.power= power;
this.miembros = miembros;
}
public Gremio(String id, boolean abierto) {
this.id = id;
this.abierto= abierto;
this.miembros = new HashSet<>();
}
// Suponer Setters y Getters y ToString
Power Class
public abstract class Power{
protected double currentPower;
protected boolean permanente;
protected double powerBoost;
public Power(double currentPower, boolean permanente, double powerBoost) {
this.currentPower= currentPower;
this.permanente= permanente;
this.powerBoost= powerBoost;
}
// Suponer Setters y Getters y ToString
Power Player Class
public class PowerJugador extends Power{
private transient Jugador jugador;
public PowerJugador(double currentPower, boolean permanente, double powerBoost, Jugador jugador) {
super(currentPower, permanente, powerBoost);
this.jugador = jugador;
public PowerJugador(double currentPower, boolean permanente, double powerBoost) {
super(currentPower, permanente, powerBoost);
}
public void pederPower(){
if(Integer.parseInt(jugador.getId()) < 100){
this.currentPower -= 5.0D;
System.out.println("El jugador " + jugador.getName()
+ " ha perdido 5 de poder");
}
}
// Suponer Setters y Getters y ToString
PowerGremio Class
public class PowerGremio extends Power{
private transient Gremio gremio;
public PowerGremio (double currentPower, boolean permanente, double powerBoost, Gremio gremio) {
super(currentPower, permanente, powerBoost);
this.jugador = gremio;
public PowerGremio (double currentPower, boolean permanente, double powerBoost) {
super(currentPower, permanente, powerBoost);
}
@Override
public void getCurrentPower(){
double pow = 0.0D;
for(Jugador j : this.gremio.getMiembros()){
pow += j.getPower().getCurrentPower();
}
currentPower = pow + powerBoost;
return currentPower;
}
// Suponer Setters y Getters y ToString
Then as you can see I have a circular dependence between Player and his power and the guild and the power of the guild; Obviously this is a very minimalist design of what it is, the power has more features.
The problem is that there is a dependency of the Guild and Player object with Power and vice versa.
Player < - > Power Player Guild < - > PowerGremio
so that when I want to create a Player object I have to do this:
Jugador j = new Jugador("50","Pepe");
j.setPower(new PowerJugador(100,false,3,j));
// Y lo mismo para el Gremio
Gremio g = new Gremio("1",true);
g.añadirMiembro(j);
g.setPower(new PowerGremio(0,false,3,g));
How could you solve this circular dependency? Is my design well implemented or should I rethink it to avoid it? In that case, how can I do it correctly?
Thank you very much.