In Kapitel 2.3 wurden die Funktion und die Verwendung von Design Patterns betrachtet. In diesem Zusammenhang kann die Verwendung von RMI als Factory Design Pattern betrachtet werden. Eine Factory bezeichnet in diesem Kontext ein Software-Teilstück, das ein Factory Design Pattern implementiert. Eine Factory-Implementierung ist immer dann sinnvoll, wenn ein Objekt die Erzeugung und/oder die Zugriffe auf andere Objekte kontrollieren soll. Indem in RMI eine Factory verwendet wird, kann die Zahl der Objekte verringert werden, die in der Registry registriert werden müssen. Zunächst soll die Anwendung von Factories anhand eines Beispiels dargestellt werden. Geht man in eine Bank, um Geld auf ein Konto einzuzahlen, so würde man - überspitzt formuliert - nicht an eine Schrankwand gehen, dort eine Schublade suchen und in dieser Schublade Geld deponieren. Stattdessen interagiert ein Kunde üblicherweise mit einem Bankangestellten und leistet Unterschriften. Die Funktion des Bankangestellten ist ein gutes Beispiel für eine Factory. Der Bankangestellte oder der Automat, der als Kontoverwalter agiert, kontrolliert die Erzeugung und/oder den Zugriff auf individuelle Konten. In den meisten RMI-Programmen existieren eine Reihe grundlegender Komponenten: Ein Server, der ein oder mehrere entfernte Objekte erzeugt, von denen jedes ein entferntes Interface implementiert, ein Client, der den Namens-Server (Registry) dazu verwendet, um eine Referenz auf entfernte Objekte zu bekommen und die Registry, die den ersten Kontakt des Clients mit dem Server ermöglicht. Im Folgenden sei angenommen, dass ein Client zwei entfernte Interfaces verwendet, Factory und Produkt. Die Klasse FactoryImpl implementiert das Interface Factory, die Klasse ProduktImpl das Interface Produkt. Zur Verwendung einer Factory sind dann die folgenden Schritte zu durchlaufen (siehe auch Abb. 11-3): Die Klasse FactoryImpl registriert sich in der Registry. Der Client fordert eine Referenz einer Factory an. Die Registry liefert eine entfernte Referenz auf FactoryImpl zurück. Der Client ruft eine entfernte Methode der Klasse FactoryImpl auf, um eine entfernte Referenz auf ProduktImpl zu erhalten. Die Instanz der Klasse FactoryImpl liefert eine entfernte Referenz einer existierenden ProduktImpl-Instanz oder einer Instanz, die gerade erzeugt wurde, zurück. Dieser Vorgang basiert auf der Anforderung des Clients. Der Client ruft eine entfernte Methode der Klasse ProduktImpl auf. Abb. 11.3: Factory Design Pattern In einem Programm wäre der Bankangestellte in Form eines entfernten Interfaces implementiert, das eine oder mehrere Methoden enthält. Diese Methoden würden Objekte zurückliefern, die ein zweites Konto-Interface implementieren. Auf eine analoge Art und Weise würde das Konto-Interface alle Operationen deklarieren, die eine Person für ein Konto durchführen könnte, bspw. Einzahlungen, Auszahlungen oder die Erstellung von Kontoauszügen. In RMI wäre dann nur die Instanz des Bankangestellten in der Registry registriert. Der Bankangestellte fungiert daher als Factory, die entfernte Referenzen auf Kontenimplementierungen (bspw. Girokonto oder Sparkonto) zurückliefert.