Übung Java Design Patterns - Abstract Factoryhttps://www.springboot.ch/kurse-java-design-pattern-kurs?&atomThu, 28 Mar 2024 23:39:34 +0000stack.ch
https://stack.ch/
6e9a725d-ed5c-11ee-8c11-005056bb85fbSimtech AG - Ausbildung - Java - Kurs Java Design Patterns - Kurs Java Design Patterns - Ressourcen - Übung Java Design Patterns - Abstract Factory
https://www.springboot.ch/kurse-java-design-pattern-kurs
6e9a73a5-ed5c-11ee-8c11-005056bb85fbThu, 28 Mar 2024 23:39:34 +0000Übung Java Design Patterns - Abstract Factory
https://www.springboot.ch/kurse-java-design-pattern-kurs
6e9a74ea-ed5c-11ee-8c11-005056bb85fbThu, 28 Mar 2024 23:39:34 +0000
https://www.springboot.ch/kurse-java-design-pattern-kurs
6e9a75fa-ed5c-11ee-8c11-005056bb85fbThu, 28 Mar 2024 23:39:34 +0000Das Abstract Factory Pattern gehört zur Gruppe der Creational Patterns und ist Bestandteil der GoF.Mit dem Abstract Factory Pattern erzeugt man Familien verwandter oder voneinander abhängiger Objekte, ohne ihre konkreten Klassen zu benennen.Diese Übung soll anhand einer Vorlage aufzeigen, wie das Abstract Factory Pattern anzuwenden ist. Aus Ausgangslage dient uns eine bestehende Applikation VehiclePlace, welche das Factory Pattern implementiert, aber keine Abstract Factory. Die Vorlage implementiert das folgende Klassendiagramm: Die Applikation vermietet Fahrzeuge (Vehicles). Pro Art des Fahrzeuges ist eine Klasse (Car, Bike, Boat, ..) zugeordnet. Diese implementieren das Interface IVehicle. Das IVehicle Interface definiert Methoden für den Beginn (startRent()) und das Ende (stopRent()) einer Ausleihe des betroffenen Fahrzeuges. Die Methoden set/getMax() verwalten die maximale Anzahl der zu vermietenden Vehicles. Die Methode getAvailable() gibt die zur Zeit freien Vehicles und somit mietbaren Fahrzeuge zurück. Die Klasse VehiclePlace verwaltet alle vermietbaren Objekte (Vehicles).Diese Klasse hat nur eine Beziehung zum Interface IVehicle und kennt keine speziellen Vehicles. Diese Klasse kann auch keine neuen Vehicles instanziieren. Die Klasse VehicleFactory ist die einzige Klasse, die alle möglichen Vehicles kennt und instanziieren kann. Die Klasse stellt sicher, dass vom gleichen Typ nur genau eine Instanz vorhanden ist. Die Vorlage arbeitet mit der Klasse VehiclePlaceApp, welche eine in der Methode main(...) einen VehiclePlace installiert und über die VehicleFactory instanziiert. Das folgende Listing zeigt den Code der Methode main(...) auf: public class VehiclePlaceApp {
public static void main(String[] args) {
VehiclePlace vp = new VehiclePlace();
// init vehicle place
IVehicle car = VehicleFactory.instance("Car", 2);
vp.add(car);
IVehicle boat = VehicleFactory.instance("Boat", 5);
vp.add(boat);
IVehicle bike = VehicleFactory.instance("Bike", 10);
vp.add(bike);
// lets rent
try {
vp.startRent(bike);
vp.startRent(boat);
vp.startRent(car);
vp.stopRent(bike);
vp.stopRent(boat);
vp.stopRent(car);
} catch (Exception e) {
System.out.println(e);
}
// lets rent a bike
try {
vp.startRent(car);
vp.startRent(car);
vp.startRent(car);
} catch (Exception e) {
System.out.println(e);
}
}
}Die Applikation ergibt den folgenden Output: start renting a bike
start renting a boat
start renting a car
stop renting a bike
stop renting a boat
stop renting a car
start renting a car
start renting a car
ch.std.jdpp.abstractfactory.VehicleException: no vehicle available for rent
https://www.springboot.ch/kurse-java-design-pattern-kurs
6e9a7c4e-ed5c-11ee-8c11-005056bb85fbThu, 28 Mar 2024 23:39:34 +0000Diese Übung basiert auf einer Vorlage (Template). Die Java Dateien findet man hier.
https://www.springboot.ch/kurse-java-design-pattern-kurs
6e9a81c1-ed5c-11ee-8c11-005056bb85fbThu, 28 Mar 2024 23:39:34 +0000Lösen Sie bitte die Aufgabe wie folgt:Studieren Sie das Klassendiagramm der Vorlage.Integrieren Sie die Klassen der Vorlage (Template) in Ihre Entwicklungsumgebung. Hierzu kann am einfachsten die ZIP-Datei verwendet werden.Kompilieren Sie die gesamte Applikation und führen Sie die Methode main(...) der Klasse VehiclePlaceApp aus. Studieren Sie das Resultat.Die Applikation soll nun so umgebaut werden, dass der VehiclePlace an verschiedenen Orten funktionieren kann. So soll z.B. ein amerikanischer VehiclePlace mit den Objekten USCar, USBoat und USBike oder ein französischer mit den Objekten FrenchCar, FrenchBoat, FrenchBike funktioneren können. Die Klasse VehiclePlace selber darf nicht angepasst werden. Das Interface IVehicle soll so belassen bleiben.Für jeden Ort (Land) kann hierzu eine Factory definiert werden. Die Applikation VehiclePlaceApp soll den Ort auswählen können und den VehiclePlace mit den richtigen Vehicle-Objekten initialisieren können. Diese Initialisierung soll über die richtige ConcreteFactory erfolgen.Planen und designen Sie jetzt das Refactoring, indem Sie die vorhandene Lösung mit dem Abstract Factory Pattern umbauen. Zeichnen Sie hierzu vielleicht auch ein UML-Diagramm. Sie können hierzu auch mit anderen Teilnehmern zusammenarbeiten.Setzen Sie alsdann Ihre Lösung in ein Java Programm um. Eventuell können Sie Teile der Vorlage wiederverwenden oder abändern.Testen Sie Ihre Lösung und verifizieren Sie das Resultat.
https://www.springboot.ch/kurse-java-design-pattern-kurs
6e9a84fb-ed5c-11ee-8c11-005056bb85fbThu, 28 Mar 2024 23:39:34 +0000Eine mögliche Lösung finden Sie hierÜber uns
https://www.springboot.ch/about
Thu, 28 Mar 2024 23:39:34 +00006e9a8a30-ed5c-11ee-8c11-005056bb85fbAktuell
https://www.springboot.ch/
Thu, 28 Mar 2024 23:39:34 +00006e9a8aed-ed5c-11ee-8c11-005056bb85fbAGB
https://www.springboot.ch/agb
Thu, 28 Mar 2024 23:39:34 +00006e9a8b97-ed5c-11ee-8c11-005056bb85fbBildungswege
https://www.springboot.ch/bildungswege
Thu, 28 Mar 2024 23:39:34 +00006e9a8c3c-ed5c-11ee-8c11-005056bb85fbBlog
https://www.springboot.ch/blog
Thu, 28 Mar 2024 23:39:34 +00006e9a8cd9-ed5c-11ee-8c11-005056bb85fbRufen Sie mich an
https://www.springboot.ch/callus
Thu, 28 Mar 2024 23:39:34 +00006e9a8d75-ed5c-11ee-8c11-005056bb85fbCharts
https://www.springboot.ch/charts
Thu, 28 Mar 2024 23:39:34 +00006e9a8e0c-ed5c-11ee-8c11-005056bb85fbConsulting
https://www.springboot.ch/consulting
Thu, 28 Mar 2024 23:39:34 +00006e9a8ea8-ed5c-11ee-8c11-005056bb85fbKontakt
https://www.springboot.ch/contact
Thu, 28 Mar 2024 23:39:34 +00006e9a91af-ed5c-11ee-8c11-005056bb85fbAusbildung/Kurse
https://www.springboot.ch/education
Thu, 28 Mar 2024 23:39:34 +00006e9a924d-ed5c-11ee-8c11-005056bb85fbSoftware Engineering
https://www.springboot.ch/engineering
Thu, 28 Mar 2024 23:39:34 +00006e9a934f-ed5c-11ee-8c11-005056bb85fbFreelancer
https://www.springboot.ch/freelancer
Thu, 28 Mar 2024 23:39:34 +00006e9a93f0-ed5c-11ee-8c11-005056bb85fbImpressum
https://www.springboot.ch/impressum
Thu, 28 Mar 2024 23:39:34 +00006e9a948e-ed5c-11ee-8c11-005056bb85fbKursleiter
https://www.springboot.ch/kursleiter
Thu, 28 Mar 2024 23:39:34 +00006e9a952c-ed5c-11ee-8c11-005056bb85fbNetzwerk
https://www.springboot.ch/network
Thu, 28 Mar 2024 23:39:34 +00006e9a95c4-ed5c-11ee-8c11-005056bb85fbReferenzen
https://www.springboot.ch/references
Thu, 28 Mar 2024 23:39:34 +00006e9a965f-ed5c-11ee-8c11-005056bb85fbSitemap
https://www.springboot.ch/sitemap
Thu, 28 Mar 2024 23:39:34 +00006e9a9704-ed5c-11ee-8c11-005056bb85fbTools
https://www.springboot.ch/tools
Thu, 28 Mar 2024 23:39:34 +00006e9a979d-ed5c-11ee-8c11-005056bb85fbVision
https://www.springboot.ch/vision
Thu, 28 Mar 2024 23:39:34 +00006e9a9847-ed5c-11ee-8c11-005056bb85fb