Welches Design Pattern?

Fantasma

Aktives Mitglied
Liebe Forumsteilnehmer:

In einem Übungsproject stehe ich vor folgender Situation:
Ich habe ein Bürogebäude, mit Stockwerken und einzelnen Büros.

Die Anzahl der Stockwerke sowie die anzahl der einzelnen Büros soll erweiterbar sein.

Jetzt soll es folgende Methoden geben:
-Büro einem Mitarbeiter zuordnen
-Büro freigegeben
-Wieviele freie Büros gibt es?
-In welchem Büro ist Mitarbeiter XY eingetragen

Um die Anzahl an Stockwerken und Büros variabel zu halten habe ich
in der Klasse Gebäude eine LinkedList für Stockwerke; und in der Klasse
Stockwerke eine LinkedList für Büros angelegt.

Wenn von Main jetzt eine Methode aufgerufen werden soll, so wird diese
erst an das Gebäude, vom Gebäude an die Stockwerke und weiter an
das einzelne Büro weitergeleitet.

Und jetzt mein Bedenken: ich habe zum Beispiel die Methode assignOffice() drei mal
im Code stehen, jeweils mit anderer Implementierung, aber immerhin.

Wie kann ich das besser machen? gibt es für dieses Problem ein Standardpattern?
Welches würde das sein?

Ist meine Lösung mit den LinkedLists akzeptabel? Wie könnte eine alternative aussehen?

Ich bedanke mich schon mal für Anregungen.

Fantasma
 
PS.: Eine kleine Sache noch, ich möchte die Klasse Büro in soweit offen halten, als dass ich
in Zukunft ohne größere Veränderungen verschiedene BüroTypen mit verschiedenen eigenschaften
(z.B. Facilities) implementieren kann.
 
Ich denke, die Listen sind die beste Lösung.
Wenn du eine gewissen Anzahl an Methoden, die die gleiche Funktion haben sollen, in mehreren Klassen verwendest, kannst du dir doch ein Interface erstellen 😉
Willst du die Klasse Büro offen haltet willst machst du eine (abstrakte) Klasse Büro, die nur die Standard Methoden enthält, die jedes Büro benötigt. Wenn du nun ein z.B. "Chef Büro" erstellst erbst du von der Klasse Büro, so erhält die Klasse "Chef Büro" alle Eigenschaften des Büros und du kannst sie noch erweitern.
Ist es ungefähr das was du wissen wolltest?

Liebe grüße,
Jonas
 
Solltest vielleicht mal deinen Code posten, damit man sieht, was du genau angestellt hast.

Das Composite Pattern scheinst du ja bereits benutzt zu haben.
Für das "Büro-Problem" kannst du das Bridge-Pattern benutzen, wo im Hintergrund ein interface mit den grundlegenden Methoden liegt und danach eine - oder mehrere - abstrakte Klassen vorkommen, die dieses interface implementieren.
Danach kannst dann unterschiedliche (konkrete) Bürotypen erstellen, die du dank Polymorphie in einer Liste speichern kannst.

Ob du eine LinkedList benutzt ist eigentlich egal.
Eine ArrayList tut es genauso.
ArrayList ist halt nur schneller beim Zugriff auf einzelne Elemente, jedoch schlechter, wenn du dauernd löschst und hinzufügst.
 

Zurück
Oben