Brückenmuster vs. Dekoratormuster

8

Kann jemand das Brückenentwurfsmuster und das Dekoratormuster für mich ausarbeiten? Ich fand es in gewisser Weise ähnlich. Ich kann es nicht unterscheiden?

Ich verstehe, dass in Bridge die Implementierung von der Schnittstelle getrennt ist. Im Allgemeinen können Sie nur eine Implementierung anwenden. Decorator ist eine Art Wrapper, Sie können so viele wie möglich einpacken.

Zum Beispiel

Brückenmuster

%Vor%

Dekorationsmuster

%Vor%     
skydoor 12.02.2010, 19:28
quelle

4 Antworten

16

Der Dekorator sollte mit der Oberfläche des Objekts übereinstimmen, das Sie dekorieren. h. es hat die gleichen Methoden und erlaubt das Abfangen der Argumente auf dem Weg in und des Ergebnisses auf dem Weg nach draußen. Sie können dies verwenden, um dem dekorierten Objekt zusätzliches Verhalten zu verleihen, während die gleiche Schnittstelle / der gleiche Vertrag beibehalten wird. Beachten Sie, dass die Schnittstelle des Decorator zusätzliche zusätzliche Funktionalität zur Verfügung stellen kann, um ein nützlicheres Objekt zu erstellen.

Die Brücke hat keine solche Beschränkung. Die clientseitige Schnittstelle kann sich von der zugrunde liegenden Komponente, die die Implementierung bereitstellt, unterscheiden und somit Brücken zwischen der Client-Schnittstelle und der eigentlichen Implementierung (die möglicherweise nicht kundenfreundlich ist, Änderungen unterliegen usw.). )

    
Brian Agnew 12.02.2010, 19:31
quelle
5

Ihre Decorator-Musterimplementierung ist nicht ganz richtig - Es würde mehr Sinn machen, wenn Sie es taten:

%Vor%

Die Idee ist, dass Sie, wenn Sie eine Klasse dekorieren, die exakt gleiche Oberfläche bereitstellen. Dadurch wirkt Ihre "dekorierte" Instanz wie das Original. Auf diese Weise können Sie eine Instanz mehrmals mit mehreren Dekoratoren umschließen, aber genauso behandeln, wie Sie die ursprüngliche Instanz behandeln.

    
Reed Copsey 12.02.2010 19:35
quelle
1

Brian hat Recht. Ich werde das konzeptionell hinzufügen, der Client wird "wissen", dass er eine Brücke zu einem zugrunde liegenden Objekt verwendet, aber mit einem Dekorator kann der Client nicht erkennen, dass zwischen ihm und dem Zielobjekt eine Dekorationsschicht liegt.

Der Zweck der Brücke besteht darin, eine Abstraktionsschicht zu schaffen, um den Kunden zu schützen. Der Zweck des Dekorators besteht darin, dem Objekt Funktionalität hinzuzufügen, ohne dass der Klient dies weiß. Die meisten Dekoratoren leiten alle Funktionsaufrufe direkt an einen Zeiger auf ihre Elternklasse weiter, mit Ausnahme von Funktionen, die sich direkt auf das beziehen, was der Dekorator ändern soll.

    
JonM 12.02.2010 19:40
quelle
1

Dekorateur:

  1. Fügen Sie zur Laufzeit dem Objekt ein Verhalten hinzu . Vererbung ist der Schlüssel, um diese Funktionalität zu erreichen, was sowohl ein Vorteil als auch ein Nachteil dieses Musters ist.
  2. Es verbessert das Verhalten der Schnittstelle.
  3. Decorator kann als degenerierter Composite mit nur einer Komponente betrachtet werden. Ein Decorator fügt jedoch zusätzliche Verantwortlichkeiten hinzu - er ist nicht für die Aggregation von Objekten gedacht.
  4. Decorator unterstützt rekursive Komposition
  5. Die Decorator-Klasse deklariert eine Kompositionsbeziehung zur LCD-Schnittstelle (Lowest Class Denominator), und dieser Datenmember wird in seinem Konstruktor initialisiert.
  6. Decorator ist so konzipiert, dass Sie Aufgaben zu Objekten hinzufügen können, ohne Sub-Classing

Weitere Informationen finden Sie im Artikel sourcingmaking .

UML-Diagramm von Decorator von wikipedia :

Brückenmuster:

  1. Bridge ist ein strukturelles Muster
  2. Abstraktion und Implementierung sind zur Kompilierzeit nicht gebunden
  3. Abstraktion und Implementierung - beide können ohne Auswirkung auf den Client variieren

Verwenden Sie das Brückenmuster, wenn:

  1. Sie möchten Laufzeitbindung der Implementierung,
  2. Sie haben eine Vielzahl von Klassen, die aus einer gekoppelten Schnittstelle und zahlreichen Implementierungen resultieren,
  3. Sie möchten eine Implementierung unter mehreren Objekten teilen, Sie müssen orthogonale Klassenhierarchien zuordnen.

UML-Diagramm der Bridge von wikipedia :

Im UML-Diagramm können Sie den Unterschied beobachten:

Im Decorator-Muster implementiert Decorator Component, das zur Laufzeit durch ConcreteComponent ersetzt wird. .

Im Bridge-Muster implementiert ReddefinedAbstraction das Implementor nicht. Stattdessen wird Komposition verwendet, sodass der Implementor zur Laufzeit ohne Clientwissen dynamisch variieren kann.

Decorator kann die Abstraktion im Gegensatz zum Bridge-Muster nicht von der Implementierung entkoppeln.

Wenige nützliche Beiträge:

Wann das Decorator-Muster verwenden?

Wann verwenden Sie das Brückenmuster? Wie unterscheidet es sich von Adapter-Muster?

    
Ravindra babu 30.05.2016 07:34
quelle