Java Reference
In-Depth Information
if (taxi == null) // Es ist kein freies Taxi vorhanden
System.out.println ("Fuer Passagier " + this.getName()
+ " ist kein freies Taxi vorhanden.");
else
taxi.passagierSteigtEin (this);
}
public void taxiVerlassen (TaxiZentrale taxiZentrale)
{
if (taxi != null)
{
taxi.passagierSteigtAus();
taxiZentrale.taxiFreigeben (taxi);
}
}
}
Die Klasse TaxiZentrale stellt den eigentlichen Objektpool dar. Diese Klasse ver-
waltet ein Objekt der Klasse Vector zum Speichern der Taxis. Die beiden Methoden
taxiAnfordern() und taxiFreigeben() dienen zum Anfordern bzw. zum Zurück-
geben eines Taxis an den Objektpool. Da diese Methoden die Liste verfügbarer Taxis
bearbeiten, sollten sie threadsicher gemacht werden. Dies erfolgt über das Schlüssel-
wort synchronized . Um sicherzustellen, dass der Taxi-Pool eine einzige, zentrale
Verwaltungsstelle für Taxis darstellt, ist die Klasse TaxiZentrale zusätzlich als
Singleton (siehe Kapitel 4.20) implementiert. Hier der Quellcode der Klasse Taxi-
Zentrale :
// Datei: TaxiZentrale.java
import java.util.Vector;
public class TaxiZentrale
{
private int size = 2; // Es gibt leider nur 2 Taxis
private static TaxiZentrale taxiZentrale = new TaxiZentrale();
private Vector<Taxi> taxis;
private TaxiZentrale()
{
taxis = new Vector<Taxi> (size);
for (int i = 1; i <= size; i++)
taxis.add (new Taxi (i));
System.out.println ("Neue Taxizentrale mit " + size
+ " verwalteten Taxis erzeugt.");
}
public static TaxiZentrale gibZentrale()
{
return taxiZentrale;
}
public synchronized Taxi taxiAnfordern()
{
Search WWH ::




Custom Search