Prototyp [ Übersicht ] [ Beispiel ] [ Quellen ] [ Home Entwurfsmuster ]


Beispiel

Wir schreiben das Jahr 1426. Sie sind Besitzer einer Schiffswerft zu Rostock, die mit den modernsten Methoden ihrer Zeit arbeitet. Als erster ihres Fachs führten sie Blaupausen ein (Anm. des Schreiberlings: so genau weiß man das nicht!), die einer gewissen Spezifikation folgen müssen. Der Kunde sucht sich die entsprechende Blaupause aus, gibt an, aus welchem Material das Schiff bestehen soll und welchen Namen es tragen soll. Mit diesen Angaben stellen Sie dann das Schiff her.
Allerdings ist ihre Kunde nicht nur auf ihre Blaupausen beschränkt. Hält er sich an die Spezifikationen ihrer Blaupausen, so kann er auch eine eigene mitbringen.

Das Java-Applet wurde mit der J2SE 1.5.0 entwickelt.
Die verwendeten Bilder stammen aus dem Spiel "Patrizier II: Aufstieg der Hanse"
(mit freundlicher Genehmigung von Ascaron Entertainment).




Beschreibung

[klick] zum vergrössern
 Abb. 2: «Client» und «Prototype» des Beispiels

Der «Client» des Beispiels, als «Singleton» (Das Singleton Pattern) implementiert, ist die Klasse ShipFactory. Dieser Klasse wird ein «ConcretePrototype» vom Typ Ship übergeben. Unter Angabe weiterer Parameter kann dann von der ShipFactory eine neue Instanz erzeugt werden:

  public class ShipFactory
  {
    ...
    // Rückgabe der Singleton-Instanz
    public static ShipFactory getInstance(){...}
  
    public void setShipPrototype( Ship shipPrototype ) {...}
    public Ship getNewShipInstance( String material, String name ) {...}
  }

[klick] zum vergrössern
 Abb. 3: Hierarchie Ship

Der abstrakte «Prototype» Ship deklariert die Methode clone():Object um eine Kopie von sich selbst zurückzugeben. Da das Beispiel in Java implementiert ist, muss hierbei der Rückgabewert vom Typ Object sein, da diese Methode bereits in der Basisklasse Object aller Java-Klassen deklariert ist. Weiterhin spezifiziert Java ein Interface Cloneable, welches von Klassen, die Klonen unterstützen, implementiert werden sollte:

  public abstract class Ship
  implements Cloneable
  {
    ...
    public abstract Object clone();
    ...
  }
Alle Subklassen (s. Abb. 3) implementieren die Methode clone():Object und geben entsprechend eine Kopie von sich zurück.


[ Übersicht ] [ Beispiel ] [ Quellen ] [ Home Entwurfsmuster ]
Stand: 31.03.2005, Autor: Jens Günther