Basierend auf "Entwurfsmuster von Kopf bis Fuß" der GOF
// Ein Enten Interface
public interface Ente {
public void quaken();
public void fliegen();
}
// Eine konkrete Ente
public class StockEnte implements Ente {
public void quaken() {
System.out.println("Quak");
}
public void fliegen() {
System.out.println("Ich fliege!");
}
}// Ein Truthahn Interface
public interface Truthahn {
// Truthähne quaken nicht, sie kollern! ;)
public void kollern();
public void fliegen();
}
public class WilderTruthahn implements Truthahn {
public void kollern() {
System.out.println("Koller koller!");
}
public void fliegen() {
System.out.println("Ich fliege nur kurze Strecken");
}
}public class TruthahnAdapter {
}public class TruthahnAdapter implements Ente {
public void quaken() {
}
public void fliegen() {
}
}public class TruthahnAdapter implements Ente {
private Truthahn truthahn;
public TruthahnAdapter(Truthahn truthahn) {
this.truthahn = truthahn;
}
public void quaken() {
}
public void fliegen() {
}
}public class TruthahnAdapter implements Ente {
private Truthahn truthahn;
public TruthahnAdapter(Truthahn truthahn) {
this.truthahn = truthahn;
}
public void quaken() {
truthahn.kollern(); // Kollert
}
public void fliegen() {
for (int i = 0; i < 5; i++) {
truthahn.fliegen(); // Fliegt 5x Kurzstrecke
}
}
}public class EntenTester {
public static void main(String[] args) {
StockEnte ente = new StockEnte();
WilderTruthahn truthahn = new WilderTruthahn();
Ente truthahnAdapter = new TruthahnAdapter(truthahn);
enteTuWas(ente);
enteTuWas(truthahnAdapter);
}
static void enteTuWas(Ente ente) {
ente.quaken();
ente.fliegen();
}
}public interface Heimkino {
public void filmSchauen(String filmtitel);
public void filmBeenden();
}
...und eine Fernbedienung mit nur zwei Knöpfen! ;)
public class MeinHeimkino implements Heimkino {
public void filmSchauen(String filmtitel) {}
public void filmBeenden() {}
}public class MeinHeimkino implements Heimkino {
// {Membervariablen Deklaration}
public MeinHeimKino(
Verstärker verstärker,
Tuner tuner,
BluRayPlayer blurayPlayer,
Beamer beamer,
Leinwand leinwand,
Beleuchtung beleuchtung,
PopcornMaschine popcornMaschine
) {
this.verstärker = verstärker;
this.tuner = tuner;
// you get it...
}
public void filmSchauen(String filmtitel) { ... }
public void filmBeenden() { ... }
}public class MeinHeimkino implements Heimkino {
// {Membervariablen Deklaration}
// {Konstruktor}
public void filmSchauen(String filmtitel) {
System.out.println("Der Film fängt gleich an...");
popcorn.ein();
popcorn.starten();
beleuchtung.dimmen(10);
leinwand.runter();
beamer.ein();
// usw.
blurayplayer.ein();
blurayPlayer.starten(filmtitel);
}
public void filmBeenden() { ... }
}public class MeinHeimkino implements Heimkino {
// {Membervariablen Deklaration}
// {Konstruktor}
public void filmSchauen(String filmtitel) { ... }
public void filmBeenden() {
System.out.println("Fahre Heimkino herunter...");
popcorn.aus();
beleuchtung.ein();
leinwand.hoch();
beamer.aus();
verstärker.aus();
blurayPlayer.anhalten();
blurayPlayer.auswerfen();
blurayPlayer.aus();
}
}public class HeimkinoTestlauf {
public static void main(String[] args) {
// hier werden die einzelnen Komponenten erstellt
Heimkino heimkino = new HeimkinoFassade(verstärker,
tuner, blurayPlayer, beamer, leinwand,
beleuchtung, popcornMaschine);
heimkino.filmSchauen("Django Unchained");
heimkino.filmBeenden();
}
}Das Fassaden Muster folgt dem Prinzip der Verschwiegenheit:
Sprechen Sie nur mit Ihren engsten Freunden.
In der OO-Programmierung ist es gut, nur einen Freund zu haben!
Ein Automat ist endlich, wenn die Menge der Zustände, die er annehmen kann, endlich ist.
Ein Zustand speichert Information.
Ein Zustandsübergang zeigt eine Änderung des Zustandes des EA und wird durch logische Bedingungen beschrieben, die erfüllt sein müssen, um den Übergang zu ermöglichen.
Zustandsdiagramm aus dem Vortrag:
Jeder Zehnte erhält ein Kaugummi umsonst!