master
nikow 2023-01-08 00:00:32 +01:00
parent 40ed734a79
commit 532f889fd6
2 changed files with 95 additions and 81 deletions

View File

@ -3,11 +3,11 @@ package Domäne;
import java.util.HashMap; import java.util.HashMap;
import tpe.exceptions.roboter.exceptions.RobotException; import tpe.exceptions.roboter.exceptions.RobotException;
/** /**
* Factory-Klasse für R2D2 und C3PO
* *
* Schnittstelle zwischen Roboter und FactorySystem. * @author Kai-Niklas Dippold
* hier wird auch das Objekt Pris erzeugt.
* RobotFactory hat eine HashMap wo die Roboter gelagert werden.
* *
*/ */
public class RobotFactory { public class RobotFactory {
@ -15,16 +15,24 @@ public class RobotFactory {
private Roboter pris = Nexus6.getInstance(); private Roboter pris = Nexus6.getInstance();
private HashMap<Integer, Roboter> roboterLager = new HashMap<>(); private HashMap<Integer, Roboter> roboterLager = new HashMap<>();
/**
* Benennt die RobotFactory und setzt Nexus-Roboter "Pris" ins Roboterlager
*
* @param name Name der RobotFactory
*/
public RobotFactory(String name) { public RobotFactory(String name) {
this.name = name; this.name = name;
roboterLager.put(pris.getId(), pris); roboterLager.put(pris.getId(), pris);
} }
/** /**
* Hier werden Roboter erzeugt und in die HashMap gespeichert. * Erstellt neue Roboter nach Anforderungen, speichert diese im Roboterlager und
* Außerdem wird durh die if-Abfrage zweischen R2D2 und C3PO unterschieden. * gibt die Id des erstellten Roboters zurück
* @param robotType *
* @param name * @param robotType entweder R2D2 oder C3PO
* @return id vom Roboter der gerade erzeugt worden ist. * @param name Name des Roboters
*
* @return Gibt die ID des erstellten Roboters zurück.
*/ */
public int addRobot(RobotType robotType, String name) { public int addRobot(RobotType robotType, String name) {
Roboter roboter; Roboter roboter;
@ -41,29 +49,32 @@ public class RobotFactory {
} else } else
return -1; return -1;
} }
/** /**
* Gibt den Namen der RobotFactory zurück.
* *
* @return name um eventuell den Namen der RobotFactory zurückzugeben. * @return Name der RobotFactory
*/ */
public String getName() { public String getName() {
return name; return name;
} }
/** /**
* gibt den gesuchten Roboter mit der passenden ID zurück. * Duchsucht das Roboterlager nach einem bestimmten Roboter
* @param id *
* @return Roboter objekt * @param id Id des Roboters
* @return Instanz des Roboters mit der gefragten Id
*/ */
public Roboter findeRoboter(int id) { public Roboter findeRoboter(int id) {
return roboterLager.get(id); return roboterLager.get(id);
} }
/** /**
* Diese Methode ist wichtig um die Ids zufällig zur vergeben. * Generiert eine Zahl innerhalb der gegebenen Parameter
* Je nach robotType wird ein anders min und max übergeben. Das gibt *
* dann den Bereich an wo die Zahl zufällig vergeben wird. * @param min Mindestgröße der Zahl
* Wurde diese ID schon vergeben, so ruft sich die Methode von selbst auf. * @param max Maximalgröße der Zahl
* @param min minimum vom Bereich * @return Zufallszahl innerhalb der Parameter
* @param max Maximum vom Bereich
* @return randomValue die zufällige und noch nicht vergebene ID
*/ */
private int idVergeben(int min, int max) { private int idVergeben(int min, int max) {
@ -74,20 +85,25 @@ public class RobotFactory {
return randomValue; return randomValue;
} }
/** /**
* gibt anhand der ID den Zustand des Roboters zurück. * Prüft ob ein Roboter ein- oder ausgeschaltet ist
* @param id *
* @return zustand vom Roboter * @param id Id des Roboters
* @return Zustand des Roboters
*/ */
public boolean roboterZustand(int id) { public boolean roboterZustand(int id) {
Roboter r = findeRoboter(id); Roboter r = findeRoboter(id);
boolean zustand = r.isPowerOn(); boolean zustand = r.isPowerOn();
return zustand; return zustand;
} }
/** /**
* Um den richtigen Roboter anhand der ID An oder Aus zu schalten. * Schaltet einen Roboter ein wenn er ausgeschaltet ist und schaltet ihn aus
* @param id um den richtigen Roboter zu finden * wenn er eingeschaltet ist
* @return zustand vom Roboter *
* @param id Id des Roboters
* @return Zustand des Roboters
*/ */
public boolean schalterAnAus(int id) { public boolean schalterAnAus(int id) {
Roboter r = findeRoboter(id); Roboter r = findeRoboter(id);
@ -95,14 +111,15 @@ public class RobotFactory {
boolean zustand = r.isPowerOn(); boolean zustand = r.isPowerOn();
return zustand; return zustand;
} }
/** /**
* Hier werden beide Methoden aufgerufen. Zuerst wird der richtige * Ruft die Methoden think() und speak() eines Roboters auf und gibt dessen
* Roboter gefunden, dann werden die zahlen von der think()-methode sortiert, und * Ausgabe wieder.
* anschließend mit den richtigen Trennzeichen mit der speak()-methode ausgegeben. *
* @param id * @param id Id des Roboters
* @param zahlen * @param zahlen Int-Array
* @return ausgabe als String Sortiert, mit den richtigen Trennzeichen * @return String mit dem Inhalt des gegebenen Arrays, nachdem es von dem
* @throws RobotException falls der Roboter Aus ist oder zahlen[] die Zahl 42 enthält. * Roboter sortiert wurde.
*/ */
public String aufrufSpeakAndThink(int id, int[] zahlen) throws RobotException { public String aufrufSpeakAndThink(int id, int[] zahlen) throws RobotException {
Roboter r = findeRoboter(id); Roboter r = findeRoboter(id);
@ -111,19 +128,23 @@ public class RobotFactory {
return ausgabe; return ausgabe;
} }
/** /**
* Hier wird der letzte Fehler zurückgegeben, den der Roboter geworfen hat. * Gibt den letzten Fehler zurück, auf den der Roboter gestoßen ist
* @param id *
* @return RobotException letzte Ausnahme vom Roboter * @param id Id des Roboters
* @return Die RobotException welche im Roboter gespeichert ist
*/ */
public RobotException letzterFehler(int id) { public RobotException letzterFehler(int id) {
Roboter r = findeRoboter(id); Roboter r = findeRoboter(id);
return r.getLastException(); return r.getLastException();
} }
/** /**
* Hier werden anhand der Id Typ, Name und Seriennummer vom Roboter zurückgegeben. * Gibt die Daten eines Roboters wieder
* @param id *
* @return ausgabe als String für die Daten des Roboters * @param id Id des Roboters
* @return String mit Typ, Namen und Id des Roboters
*/ */
public String datenDesRoboters(int id) { public String datenDesRoboters(int id) {
Roboter r = findeRoboter(id); Roboter r = findeRoboter(id);
@ -134,18 +155,21 @@ public class RobotFactory {
return ausgabe; return ausgabe;
} }
/** /**
* gibt die größe vom roboterLager zurück. * Gibt die Größe des Roboterlagers an.
* Wird für das Testen verwendet. *
* @return int größe des Lagers * @return Größe des Roboterlagers
*/ */
public int getRoboterLagerSize() { public int getRoboterLagerSize() {
return roboterLager.size(); return roboterLager.size();
} }
/** /**
* Gibt einen boolean zurück um zu schauen ob dieser Roboter schon existiert. * Überprüft ob das Lager einen bestimmten Roboter enthält.
* @param id um zu schauen ob diese Id schon vergeben wurde *
* @return boolean true bedeutet, dass es diesen Roboter gibt * @param id Id des Roboters
* @return true oder false je nachdem ob der Roboter im Lager vorhanden ist
*/ */
public boolean istDieserRoboterDa(int id) { public boolean istDieserRoboterDa(int id) {
return roboterLager.containsKey(id); return roboterLager.containsKey(id);

View File

@ -3,24 +3,33 @@ package facade;
import Domäne.RobotFactory; import Domäne.RobotFactory;
import Domäne.RobotType; import Domäne.RobotType;
import tpe.exceptions.roboter.exceptions.RobotException; import tpe.exceptions.roboter.exceptions.RobotException;
/** /**
* Factorysystem agiert als Fassade für RobotFactory
*
* @author Kai-Niklas Dippold
*
* *
* Ist die Schnittstelle zwischen RobotFactory und Factory.
* Hier wird eine neue RobotFactory erzeugt
* *
*/ */
public class Factorysystem { public class Factorysystem {
private RobotFactory robotFactory; private RobotFactory robotFactory;
/**
* Erstellt eine neue RobotFactory mit dem gegebenen Namen
*
* @param name Name der RobotFactory
*/
public Factorysystem(String name) { public Factorysystem(String name) {
this.robotFactory = new RobotFactory(name); this.robotFactory = new RobotFactory(name);
} }
/** /**
* Dieser Methode wird der Name des Roboters und ein int 1 oder 2 übergeben. * Legt einen neuen Roboter je nach Auswahl mit dem gegebenen Namen an
* Durch die if_Abfrage wird entweder dem Roboter den Typ R2D2 oder C3pO vergeben. *
* @param name des Roboters * @param name Name des Roboters
* @param auswahl um den Typ des Roboters zu bestimmen * @param auswahl Bei 1 wird ein R2D2 erstellt, bei 2 ein C3PO.
* @return id vom Roboter * @return Gibt die ID des erstellten Roboters zurück
*/ */
public int roboterAnlegen(String name, int auswahl) { public int roboterAnlegen(String name, int auswahl) {
RobotType robottype; RobotType robottype;
@ -36,55 +45,36 @@ public class Factorysystem {
return -1; return -1;
} }
/** /**
* Um den Zustand des Roboter zurückzugeben. * Ruft die Methode roboterZustand(id) in der RobotFactory auf
* @param id vom Roboter *
* @return gibt den Zustand zurück * @see Domäne.RobotFactory#roboterZustand(int)
* @param id Id des Roboters
* @return Gibt die Wiedergabe von roboterZustand(id) zurück
*/ */
public boolean zustandRoboter(int id) { public boolean zustandRoboter(int id) {
return robotFactory.roboterZustand(id); return robotFactory.roboterZustand(id);
} }
/**
* Um den Roboter An oder Aus zuschalten.
* @param id vom Roboter
* @return boolean True bedeutet An, False bedeutet Aus
*/
public boolean schalterBetätigen(int id) { public boolean schalterBetätigen(int id) {
return robotFactory.schalterAnAus(id); return robotFactory.schalterAnAus(id);
} }
/**
* Um die Methoden think() und speak() vom Roboter aufzurufen.
* @param id vom Roboter
* @param zahlen die Zahlen die sortiert werden sollen
* @return als String Sortiert, mit den richtigen Trennzeichen
* @throws RobotException falls der Roboter Aus ist oder zahlen[] die Zahl 42 enthält.
*/
public String sprechenAufruf(int id, int[] zahlen) throws RobotException { public String sprechenAufruf(int id, int[] zahlen) throws RobotException {
String ausgabe = robotFactory.aufrufSpeakAndThink(id, zahlen); String ausgabe = robotFactory.aufrufSpeakAndThink(id, zahlen);
return ausgabe; return ausgabe;
} }
/**
* um den letzten Fehler zu lesen den der Roboter geworfen hat.
* @param id vom Roboter
* @return RobotException der letzte Fehler
*/
public RobotException fehlerAuslesen(int id) { public RobotException fehlerAuslesen(int id) {
return robotFactory.letzterFehler(id); return robotFactory.letzterFehler(id);
} }
/**
* Um die Daten des Roboters an Factory zu übergeben.
* @param id vom Roboter
* @return Daten vom Roboter
*/
public String roboterDaten(int id) { public String roboterDaten(int id) {
return robotFactory.datenDesRoboters(id); return robotFactory.datenDesRoboters(id);
} }
/**
* Um den boolean an Factory zu übergeben.
* @param id vom Roboter
* @return boolean ob dieser Roboter existiert oder nicht
*/
public boolean istDieserRoboterDa(int id) { public boolean istDieserRoboterDa(int id) {
boolean istDa = robotFactory.istDieserRoboterDa(id); boolean istDa = robotFactory.istDieserRoboterDa(id);
return istDa; return istDa;