Tienes que ir cambiando los estados si no no funcionará.
Hay varias formas, una es dentro de las subclases que heredan de la interfaz AlgVelocidad.
Código Java:
Ver originalpublic class Abanico {
private AlgVelocidad algVelocidad;
public Abanico() {
algVelocidad = new VelBaja(this);
}
public void setVelocidad(AlgVelocidad alg){
algVelocidad=alg;
}
public void velocidad(){
algVelocidad.velocidad();
}
}
public abstract class AlgVelocidad {
protected Abanico abanico;
public abstract void velocidad();
}
public class VelBaja extends AlgVelocidad{
public VelBaja(Abanico abanico){
this.abanico = abanico;
}
@Override
public void velocidad() {
abanico.setVelocidad(new VelMedia(abanico));
}
}
public class VelMedia extends AlgVelocidad{
public VelMedia(Abanico abanico){
this.abanico = abanico;
}
@Override
public void velocidad() {
abanico.setVelocidad(new VelAlta(abanico));
}
}
public class VelAlta extends AlgVelocidad{
public VelAlta(Abanico abanico){
this.abanico = abanico;
}
@Override
public void velocidad() {
abanico.setVelocidad(new VelBaja(abanico));
}
}