Entwickeln Sie eine Klasse RobotFactory mit deren Hilfe man Instanzen der beiden Roboter- Typen
erzeugen kann. Eine Enumeration mit dem Namen RobotType dient dazu, bei der Erzeugung anzugeben,
ob man einen R2D2- oder einen C3PO-Roboter haben möchte.
Vergessen Sie nicht, dass jeder Roboter eine Seriennummer aus dem jeweiligen Bereich benötigt und
dass er bei der Erzeugung seinen unveränderlichen Namen bekommt. Verbergen Sie die Implementierung
der Roboter vor dem Verwender und erlauben Sie nur Zugriff auf die Factory, die Interfaces und
die Ausnahmen. Wählen Sie entsprechende Pakete gemäß ihrem Schema, um dies zu realisieren.
Zusätzlich zu den beiden produzierten Roboter-Modellen R2D2 und C3PO steht in der Firma noch ein
alter Nexus-6-Roboter mit dem Namen “Pris“ (Seriennummer 19281982)herum, der leider seit einer
Begegnung mit einem Blade-Runner irreparabel defekt ist und nicht eingeschaltet werden kann (man kann
den Schalter zwar drücken, dies hat aber keine Wirkung). Da es nur dieses eine Exemplar gibt, können
auch keine weiteren Nexus-6- Modelle hergestellt werden. Implementieren Sie daher den Nexus-6-Roboter
(Klassenname Nexus6) als Singleton. Beachten Sie, dass die speak- und think-Methoden nicht funktionieren
sollen, sondern grundsätzlich eine Ausnahme Robot"-Illegal"-State"-Exception werfen.
Schreiben Sie automatisierte JUnit-Tests mit denen Sie die korrekte Funktionsweise der Implementierungen
und der Factory-Klasse überprüfen. Denken Sie daran, auch die Ausnahmen zu testen.
Angenommen, Ihre Firma möchte eine weitere Produktlinie eröffnen und in Zukunft auch noch T1000-Roboter
herstellen, die natürlich auch das Robot-Interface implementieren: Welche Änderungen müssten Sie an Ihrem
Projekt durchführen? Sie brauchen keine Implementierung dafür zu erstellen, legen Sie dafür bitte eine
Textdatei in Ihr Projekt, in der Sie die notwendigen Erweiterungen und evtl. Änderungen kurz erläutern.
* Mit Ihrer Implementierung sollten folgende Begrifflichkeiten abgedeckt sein:
* Singleton-Pattern,
* Factory-Pattern,
* Exceptions,
* Interfaces,
* abstrakte Klassen,
* JUnit- Tests,
* Enumerationen,
* Sortieralgorithmen,
* Streams & Lambdas.
* Achten Sie bei Ihrer Implementierung auf die Konsistenz der Sprache (Englisch/Deutsch).
* Kommentieren Sie Ihre Methoden ausführlich mit Javadoc-Kommentaren,
* wie in den Interfaces gezeigt (googlen Sie ggf. nach weiteren Details dafür).
* Bei der Implementierung von Methoden aus den Interfaces, dürfen Sie mit @see... auf deren Javadocs verweisen und müssen die Dokumentation nicht duplizieren.
* Sie müssen kein UML-Diagramm anfertigen, können dies aber gerne tun.
* Testen Sie Ihre Implementierung möglichst umfangreich. Wir werden es auf jeden Fall tun. !
* Nutzen Sie für die gemeinsame Arbeit an der Implementierung ein Git-Repository und nutzen Sie regelmäßig.
* Es müssen von allen Team-Mitgliedern jeweils mindestens fünf Commits mit substanziellem Inhalt auf den main-Branch gepusht werden.