| Brücke | [ Übersicht ] [ Beispiel ] [ Quellen ] [ Home Entwurfsmuster ] |
Beispiel |
Als Beispiel einer Bridge nehmen wir den abstrakten Datentyp Schlange als Abstraktion. Eine Schlange kann unterschiedlich implementiert werden, als:
|
Beschreibung |
Eine Anwendung, in unserem Fall das obere Applet-Beispiel, benötigt eine Schlange, das heißt, ein Objekt der Klasse "KonkrSchlange". Um unterschiedliche Implementierungen dieser Schlange zuzulassen, wird der "KonkrSchlange" ein Attribut vom Typ "AbstrSchlangeImplementierer" hinzugefügt. Dies veranschaulicht das rechte Diagramm. Wie zu sehen ist, wurden drei konkrete Implementierungen für die Schlange umgesetzt. Da es in der "KonkrSchlange" eine Referenz auf einen "AbstrSchlangeImplementierer" gibt, sind die Implementierungen zur Laufzeit untereinander austauschbar. Man kann die für seine Anforderungen passende Implementierung wählen. |
Der "AbstrSchlangeImplementierer" kann man als Interface oder als abstrakte Klasse umsetzen. In der Beispielanwendung wurde ein Interface verwendet, um die Methoden einer Schlange zu definieren: public interface AbstrSchlangeImplementierer { public void insertElement(char w); public void removeElement(); public char getFirstElement(); public char getAndRemoveElement(); public boolean isEmpty(); public boolean isFull(); public int getAnzahl(); }Wenn im Applet eine bestimmte Implementierung der Schlange gewählt wird, dann wird die Referenz auf einen "AbstrSchlangeImplementierer" in der "KonkrSchlange" entsprechend gesetzt. Die unterschiedlichen Implementierungen der Schlange wurden deklariert als: private "AbstrSchlangeImplementierer" s1, s2, s3; s1 = new EinfachVerketteteSchlange(); s2 = new DoppeltVerketteteSchlange(); s3 = new RingspeicherSchlange();Das Ändern der Implementierungen geschieht wie folgt: public void checkboxAction() { if (g.getSelectedCheckbox().getLabel() == "Einfach verkettete Schlange") { schlange.setSchlangeImplementierer(s1); } else if (g.getSelectedCheckbox().getLabel() == "Doppelt verkettete Schlange") { schlange.setSchlangeImplementierer(s2); } else if (g.getSelectedCheckbox().getLabel() == "Schlange als Ringspeicher") { schlange.setSchlangeImplementierer(s3); } }Die Operationen an die "KonkrSchlange", wie Einfügen oder Löschen eines Elementes, werden an die entsprechende Implementierung weitergeleitet, wo sie dann ausgeführt werden. Somit sieht die Methode zum Einfügen eines Elementes in einer "KonkrSchlange" wie folgt aus: public void insertElement(char w) { impl.insertElement(w); } |
[ Übersicht ] [ Beispiel ] [ Quellen ] [ Home Entwurfsmuster ] |