March 07, 2010

Definition Builder mit Java Beispiel

« SoapUI limitations and workarounds : mock response test step | Main | OSGI Tutorial and Running Example »

Definition:

Der Builder wird genutzt, wenn ein und derselbe Konstruktionsprozeß eines Objekts unterschiedliche Repräsentationen erbringen soll.

Builder definiert Schnittstellen, die Teile eines anderen Objekts ergänzend erzeugen sollen. Ein ConcreteBuilder implementiert die Methoden und gibt das Ergebnis an das zu bauende Objekt.

Beispiel:

Zur Erläuterung des Builder-Entwurfsmusters wurde ein Währungsumrechner implementiert. Das Programm bietet die Möglichkeit neue Währungen mit entsprechenden Umrechnungskursen anzulegen, bestehende Einträge zu verändern bzw. zu löschen und einen beliebigen Betrag von einer Währung in eine andere umrechnen zu lassen. Bei Beenden der Anwendung werden die aktuell vorhandenen Einträge extern abgespeichert und bei erneutem Starten wieder eingelesen.
Das Entwurfsmuster wurde zur Generierung der Oberfläche genutzt. Der linke Teil des angezeigten Fensters bleibt immer gleich. Je nach Buttonauswahl ändert sich das Aussehen der rechten Seite. Die notwendigen Eingabefelder bzw. Buttons werden zur Verfügung gestellt.

CurrencyExchange (Director) ist die zentrale Klasse der Anwendung. Sie ist für den Aufbau der Standardoberfläche mit leerer rechter Seite verantwortlich und bestimmt die Art der Choice, die für den Aufbau der rechten Seite verantwortlich ist.

public class CurrencyExchange extends JFrame implements Runnable {
  private Choice choice;
  ...
  private JPanel choicePanel;
  ...
  
  public void setChoice(Choice c) {
    choicePanel.removeAll();
    this.choice = c;
  }

  public void runChoice() {
    choicePanel.add(this.choice.getUI());
    ...
  }
  ...
} 

In der Variable choice wird die Wahl des zusätzlich zu erzeugenden Teils der Oberfläche (AddChoice, DeleteChoice, EditChoice oder ExchangeChoice) abgespeichert. Die setChoice()-Methode ermöglicht das Setzen der Variable. Mit Hilfe der Methode runChoice() wird die getUI()-Methode der jeweiligen Implementierung von Choice aufgerufen.

Choice stellt die Schnittstelle für alle am Muster beteiligten Klassen dar. Die Klassen AddChoice, DeleteChoice, EditChoice und ExchangeChoice implementieren das folgende Interface:

public interface Choice {
  public JPanel getUI();
}

AddChoice (ConcreteBuilder1) stellt die benötigten Eingabefelder zum Anlegen einer neuen Umrechnungsmöglichkeit bereit.

public class AddChoice implements Choice {
  public JPanel getUI() {
    panel.setLayout(new GridBagLayout());
    ...
  }
  ...
}

In der getUI()-Methode wird die benötigte Oberfläche zum Hinzufügen eines Eintrags erstellt und auf die freie rechte Seite der vorhandenen Oberfläche gezeichnet. Die Implementierung der anderen drei Klassen erfolgte analog.

DeleteChoice (ConcreteBuilder2) ermöglicht es dem Nutzer eine ausgewählte Umrechnungsform zu entfernen.

EditChoice (ConcreteBuilder3) bringt die Daten der ausgewählten Währungen und deren Wechselkurs auf die rechte Seite des Fensters. Sie können editiert und neu abgespeichert werden.

ExchangeChoice (ConcreteBuilder4) fordert nach Auswahl der Quell- und Zielwährung die Eingabe des umzurechnenden Geldbetrages und zeigt das entsprechende Ergebnis an.

Besonderheiten:

Werden neue Repräsentationen benötigt, kann das Programm leicht erweitert werden. Soll die Wahl der zu implementierenden Methoden der Unterklasse selbst überlassen werden, so ist die Schnittstelle als abstrakte Klasse mit leeren Methoden zu implementieren.

Technorati Tags:

Posted by corinna.herrmann at 2:14 PM in Design Pattern

 

[Trackback URL for this entry]

Your comment:

(not displayed)
 
 
 

Live Comment Preview:

 
« March »
SunMonTueWedThuFriSat
 123456
78910111213
14151617181920
21222324252627
28293031