
public interface Flugverhalten {
void fliegen();
}
public class NichtFliegen implements Flugverhalten {
@Override
public void fliegen() {
System.out.println("Kann nicht fliegen");
}
}
public interface Quakverhalten {
void quaken();
}
public class Quietschen implements Quakverhalten {
@Override
public void quaken() {
System.out.println("Quiiietsch");
}
}
public abstract class Ente {
private Flugverhalten flugverhalten;
private Quakverhalten quakverhalten;
public void setFlugverhalten(Flugverhalten flugverhaltenKandidat) {
flugverhalten = flugverhaltenKandidat;
}
public void setQuakverhalten(Quakverhalten quakverhaltenKandidat) {
quakverhalten = quakverhaltenKandidat;
}
abstract void zeichnen();
public void fliegen() {
flugverhalten.fliegen();
}
public void quaken() {
quakverhalten.quaken();
}
public void schwimmen() {
System.out.println("Alle Enten schwimmen, sogar Modellenten!");
}
}
public class Gummiente extends Ente {
public Gummiente() {
setFlugverhalten(new NichtFliegen());
setQuakverhalten(new Quietschen());
}
@Override
void zeichnen() {
System.out.println("Ich sehe aus wie eine Gummiente");
}
}