2 Stimmen

Können Sie mir helfen, mein auf Dekoration basierendes Design zu verbessern?

Ich habe ein kleines Programm, um ein Haus zu bauen. Ein Haus hat viele Etagen (Stockwerke), ein Stockwerk kann viele Räume haben, ein Raum kann viele Gegenstände enthalten. Deshalb verwende ich die Dekorateur-Muster für dieses Programm. Hier ist der ursprüngliche Entwurf:

http://img337.imageshack.us/img337/5530/maina.jpg

Können Sie mir helfen, das Design zu verbessern?

2voto

Andreas Dolk Punkte 110776

In der objektorientierten Programmierung ist das Dekoratormuster ein Entwurfsmuster, das es ermöglicht, einem bestehenden Objekt dynamisch neues/zusätzliches Verhalten hinzuzufügen.

Das Wie wikipedia beginnt seinen Artikel über das Dekorationsmuster.

Beim Dekorationsmuster geht es also darum, einem bestehenden Objekt Verhalten hinzuzufügen. Und Gegenstände in einem Raum sind kein zusätzliches Verhalten für diesen Raum.

Ich denke, die Zusammengesetztes Muster wäre eine bessere Wahl, um ein Modell für diesen Bereich zu erstellen.

(Aber wenn Sie immer noch einen Dekorateur für Ihr Haus suchen, finden Sie vielleicht eine bessere Lösung ici ;-) )

2voto

madhurtanwani Punkte 1199

Ich glaube nicht, dass Dekorator hier das richtige Muster ist. Was ich sehe, ist das Design mehrere Instanzen von "ist-a" und "hat-a" Beziehungen.

  1. Eine "is-a"-Beziehung ist eine Spezialisierung. Beispiele: "Bungalow" "ist-a" "Haus", "ConcreteRoom1" "ist-a" "Raum".
    • "is-a"-Beziehungen werden durch Vererbung realisiert. In einigen Fällen, in denen Komposition der Vererbung vorgezogen wird, kann "is-a" durch Dekoratoren implementiert werden.
    • Idealerweise müssen die "Room"- oder "House"-Konstrukte Schnittstellen (oder abstrakte Klassen) sein, die Objektverträge und Basiseigenschaften definieren
    • Die konkreten Implementierungen dieser Schnittstellen sind die eigentlichen Objekte, mit denen Sie arbeiten werden.
  2. Eine "has-a"-Beziehung ist eine Komposition. Beispiele: "Haus" hat "Stockwerke", "Zimmer" hat "Gegenstände"
    • Im Allgemeinen kann eine has-a-Beziehung durch die Speicherung von Attributen für jedes Objekt, das Ihre Klasse "hat", implementiert werden.
    • ist es immer eine gute Idee, die Attribute als eine Sammlung der Schnittstellen zu speichern - z. B. Room haben sollen List<Item> items

Ich hoffe, das verdeutlicht die erwartete Verwendung in Ihrem Entwurf.

1voto

Sid Punkte 4762

Ich sehe hier eine Menge Vererbung. Das Dekorationsmuster schreibt weniger Vererbung und mehr Komposition vor. Sie erstellen also Dekoratoren und verschönern Ihre Objekte zur Laufzeit. Siehe Dekorateur Muster .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X