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%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.). )
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.
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.
Dekorateur:
Weitere Informationen finden Sie im Artikel sourcingmaking .
UML-Diagramm von Decorator von wikipedia :
Brückenmuster:
Verwenden Sie das Brückenmuster, wenn:
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?
Tags und Links c++ design-patterns decorator bridge