Hallo liebes Forum,
ich sitzt zurzeit an einer Änderung in meinem Code.
Ich benutze das Factroy Muster um verschiedene "Häuser" zu generieren. Jede variante (Villa, Reihenhaus, Landhaus etc. alle erben von Haus)
Die Klasse HaueserFactory hat die Methode:
+ Haus getInstance(HaeuserTyp typ)
wobei HaeuserTyp ein enum ist. (Mit den oben genanten Objekten Villa usw.)
Jeder Haus-Typ hat unterschiedliche m^2, Fensteranzahl sowie Zimmeranzahl, Fensteranzahl usw.
Wenn ich jetzt ein Häusertyp ändern möchte z.B. die Quadratmeter Zahl für das Haus mit dem Typ "Villa" muss ich die Klasse ändern also in dem Code Änderungen vornehmen.
Das will ich vermeiden!
Ich habe zwei Ansätze:
Ich füge in der Klasse ein statisches Objekt vom Typ "Property" hinzu. Statisch damit jede Unterklasse dasselbe Objekt nutzt und nicht alle ein neues Objekt vom Typ Property besitzt.
Dann lade ich die spezifischen Eigenschaften in die Unterklassen.
mir viel grade auf, dass es mehr Sinn machen würde das laden des Property Objektes auszulagern aber ist auch erstmal ein erster Entwurf.
Dann mein zweiter Ansatz den ich persönlich interessanter finde allerdings fehlt mir hier der Ansatz zur Umsetzung:
Bislang hat jeder Haus Typ seine eigene Klasse wenn ich Ansatz 1 umsetzte unterscheiden sich die Häuserunterklassen nur von dem "<HausTyp>.m2" Aufruf bei den Properties.
Wenn ich jetzt hin gehe und die Haus-Klasse umschreibe sodass es möglich ist den HausTyp über den Konstrukor zu übergeben und dass haus darauf hin die zum Haustyp gehörigen Variablen lädt, habe ich nur noch die Haus klasse und wenn ich ein Haus hinzufügen möchte muss ich nur ein neuen Haustyp hinzufügen und in die Default Properties die neuen Variablen ergänzen. Quasi muss ich den Code kaum noch anfassen.
Die Umsetzung wirft allerdings ein paar Fragen auf:
- Macht der Ansatz überhaupt erst Sinn? Eine Klasse für alle Häuser?
- Wie füge ich am besten alles ein?
- Macht es überhaupt noch Sinn für die HausTypen enum zu verwenden ? Wie könnte ich dies am besten ersetzten, dass ich nur durch ändern von config bzw. properties ein Haus hinzufügen kann ?
Für die Antworten danke ich im Voraus!
lg,
Meeresgott
ich sitzt zurzeit an einer Änderung in meinem Code.
Ich benutze das Factroy Muster um verschiedene "Häuser" zu generieren. Jede variante (Villa, Reihenhaus, Landhaus etc. alle erben von Haus)
Die Klasse HaueserFactory hat die Methode:
+ Haus getInstance(HaeuserTyp typ)
wobei HaeuserTyp ein enum ist. (Mit den oben genanten Objekten Villa usw.)
Jeder Haus-Typ hat unterschiedliche m^2, Fensteranzahl sowie Zimmeranzahl, Fensteranzahl usw.
Wenn ich jetzt ein Häusertyp ändern möchte z.B. die Quadratmeter Zahl für das Haus mit dem Typ "Villa" muss ich die Klasse ändern also in dem Code Änderungen vornehmen.
Das will ich vermeiden!
Ich habe zwei Ansätze:
Ich füge in der Klasse ein statisches Objekt vom Typ "Property" hinzu. Statisch damit jede Unterklasse dasselbe Objekt nutzt und nicht alle ein neues Objekt vom Typ Property besitzt.
Dann lade ich die spezifischen Eigenschaften in die Unterklassen.
Java:
public class Haus
{
static Property prop = null;
public Haus()
{
if(prop = null)
prop = new Property();
//Hier der PropertyLadecode
}
//Hier noch weiterer Haus Code
}
Java:
public class Villa extends Haus
{
public Villa()
{
String m2 = super.prop.getProperty("villa.m2");
String fenster = super.prop.getProperty("villa.fenster");
//usw.
}
}
Dann mein zweiter Ansatz den ich persönlich interessanter finde allerdings fehlt mir hier der Ansatz zur Umsetzung:
Bislang hat jeder Haus Typ seine eigene Klasse wenn ich Ansatz 1 umsetzte unterscheiden sich die Häuserunterklassen nur von dem "<HausTyp>.m2" Aufruf bei den Properties.
Wenn ich jetzt hin gehe und die Haus-Klasse umschreibe sodass es möglich ist den HausTyp über den Konstrukor zu übergeben und dass haus darauf hin die zum Haustyp gehörigen Variablen lädt, habe ich nur noch die Haus klasse und wenn ich ein Haus hinzufügen möchte muss ich nur ein neuen Haustyp hinzufügen und in die Default Properties die neuen Variablen ergänzen. Quasi muss ich den Code kaum noch anfassen.
Die Umsetzung wirft allerdings ein paar Fragen auf:
- Macht der Ansatz überhaupt erst Sinn? Eine Klasse für alle Häuser?
- Wie füge ich am besten alles ein?
- Macht es überhaupt noch Sinn für die HausTypen enum zu verwenden ? Wie könnte ich dies am besten ersetzten, dass ich nur durch ändern von config bzw. properties ein Haus hinzufügen kann ?
Für die Antworten danke ich im Voraus!
lg,
Meeresgott