Ist das ein gutes Dekorationsmuster für Javascript?

8

Ich brauche einige einfache Objekte, die später mit vielen verschiedenen Eigenschaften komplexer werden könnten, also dachte ich an Dekorationsmuster. Ich habe mir Crockfords Power Constructor und Object Augmentation angesehen:

%Vor%

Ist das ein guter Weg, um Decorator Pattern in Javascript zu haben? Gibt es andere bessere Möglichkeiten, dies zu tun?

    
Manuel Bitto 10.05.2010, 15:41
quelle

1 Antwort

8

Es gibt verschiedene Implementierungen des Decorator-Musters in Javascript auf Wikipedia und anderen Seiten - (1) , (2) , (3) . Das Muster ist definiert als:

Das Decorator-Muster ist ein Entwurfsmuster, mit dem neues / zusätzliches Verhalten dynamisch zu einem vorhandenen Objekt hinzugefügt werden kann.

Die Objekterweiterung ist bereits in die Sprache selbst integriert. Objekte können einfach erweitert werden und Eigenschaften können jederzeit hinzugefügt werden. Warum also sollten Sie durch Reifen springen müssen, um dies zu erreichen? Sollte so etwas nicht ausreichen:

%Vor%

Wenn Sie möchten, dass eine Methode auf alle Objekte angewendet wird, die mit dieser Funktion erstellt wurden, fügen Sie diese Methode / Eigenschaften dem Prototyp der Funktion hinzu.

Update : Wenn Sie klar definierte Funktionen haben, die bei bestimmten Arten von Objekten nach Bedarf gemischt und angepasst werden können, dann ist MooTools Ansatz von erweitern und Mischen im Verhalten in Objekte ist schön gemacht. Um ein Beispiel zu geben, betrachten Sie eine UI-Komponente, deren Größe geändert werden kann, die mit einem Ziehpunkt gezogen und durch Klicken auf ein Häkchen in der oberen rechten Ecke gelöscht werden kann. Sie möchten möglicherweise nicht jede Komponente mit diesen Verhaltensweisen erstellen, sondern alle diese Verhaltensweisen einzeln in ihr eigenes Objekt definieren. Und später mischen Sie diese Verhaltensweisen in jede Art von Komponente nach Bedarf.

%Vor%

Es sieht besser und intuitiver (für mich) als etwas wie

aus %Vor%

weil wir es immer noch mit einem Label zu tun haben und nicht mit einem resizierbaren oder etwas ziehbaren oder einem löschbaren Objekt. Ein weiterer kleiner Punkt, aber noch erwähnenswert ist, dass die Klammern nach 3 oder 4 Dekoratoren nicht mehr handhabbar sind, besonders ohne gute IDE-Unterstützung.

    
Anurag 10.05.2010 16:46
quelle

Tags und Links