wake-up-neo.com

Was ist der Unterschied zwischen dem Fassaden- und dem Adaptermuster?

Ich habe beide Definitionen gelesen und sie scheinen ziemlich gleich zu sein. Könnte jemand auf die Unterschiede hinweisen?

Vielen Dank

69

Die Facade Pattern Wiki-Seite enthält eine kurze Anmerkung dazu. 

"Ein Adapter wird verwendet, wenn der Wrapper Eine bestimmte Schnittstelle Berücksichtigen muss und ein polymorphes Verhalten unterstützen muss. Andererseits wird eine Fassade Verwendet, wenn ein einfacher oder einfachere Schnittstelle zum Arbeiten. "

Ich habe eine Analogie gehört, die Sie an Ihre Universalfernbedienung denken sollten, die Sie für die Zusammenarbeit mit Ihren verschiedenen Stereoanlagen eingerichtet haben. Sie drücken "Ein" und schalten Ihre Kabelbox, Ihren Receiver und Ihr Fernsehgerät ein. Vielleicht ist es ein wirklich schickes Heimkino und dimmt das Licht und zieht auch die Schatten. Das ist eine Fassade - eine Taste/Funktion, die kompliziertere Schritte erledigt.

Das Adapter-Muster verbindet nur zwei inkompatible Schnittstellen.

EDIT: Eine schnelle Analogie für das Adapter-Pattern (basierend auf den Kommentaren) könnte so etwas wie ein DVI-zu-VGA-Adapter sein. Moderne Grafikkarten sind oft DVI, aber Sie haben einen alten VGA-Monitor. Mit einem Adapter, der an den erwarteten DVI-Eingang Ihrer Videokarte angeschlossen wird, und einen eigenen VGA-Eingang, können Sie Ihren alten Monitor mit Ihrer neuen Videokarte zum Laufen bringen.

98
awshepard

Adapter == einen quadratischen Stift in ein rundes Loch einpassen.

Facade == ein einziges Control Panel, um alle internen Komponenten auszuführen.

87
Edwin Buck

Ehrlich gesagt, viele Muster könnten programmgesteuert auf dieselbe Weise implementiert werden - der Unterschied liegt in der Absicht. 

Das Adapter-Entwurfsmuster soll die Schnittstelle einer oder mehrerer Klassen in eine vom Client erwartete Schnittstelle "übersetzen". Der Adapter würde die Aufrufe der erwarteten Schnittstelle in die tatsächliche Schnittstelle übersetzen, die die umschlossenen Klassen verwenden.

Das Fassadenmuster wird verwendet, wenn eine einfachere Benutzeroberfläche gewünscht wird (und wiederum könnte auf dieselbe Weise implementiert werden, indem die betreffenden Klassen umbrochen werden.) Sie würden nicht sagen, dass Sie eine Fassade verwenden, wenn die vorhandene Benutzeroberfläche nicht kompatibel ist, genau dann, wenn Sie dies benötigen um es lesbarer zu machen, weniger schlecht gestaltet usw.

17
J. Burch

Fassade:

Schlüssel zum Mitnehmen: (von journaldev Artikel von Pankaj Kumar) 

  1. Das Fassadenmuster ist für Client-Anwendungen eher ein Helper
  2. Fassadenmuster können an jedem Punkt der Entwicklung angewendet werden, normalerweise wenn die Anzahl der Schnittstellen wächst und das System komplex wird.
  3. Subsystemschnittstellen kennen Facade nicht und sie sollte keinen Bezug zur Facade-Schnittstelle haben
  4. Facade-Muster sollte für ähnliche Schnittstellen verwendet werden, dessen Zweck es ist, eine einzige Schnittstelle bereitzustellen, anstatt mehrere Schnittstellen, die ähnliche Aufgaben ausführen

Fassadenklassendiagramm:

 enter image description here

Adapter:

  1. Es ist ein Strukturmuster
  2. Es ist nützlich, mit zwei inkompatiblen Schnittstellenzu arbeiten. _
  3. Es macht die Dinge zum Laufen, nachdem sie entworfen wurden

Klassendiagramm des Adapters:

 enter image description here

Weitere Details zu Adapter finden Sie in diesem SE-Beitrag: 

Unterschied zwischen Brückenmuster und Adaptermuster

Hauptunterschiede:

  1. Facade definiert eine neue Schnittstelle, wohingegen der Adapter eine alte Schnittstelle verwendet. Mit dem Adapter arbeiten zwei vorhandene Schnittstellen zusammen und definieren keine völlig neue
  2. Adapter und Fassade sind beide Wrapper. aber es sind verschiedene Arten von Umhüllungen. Die Absicht von Facade besteht darin, eine einfachere Schnittstelle zu erstellen, und der Adapter beabsichtigt, eine vorhandene Schnittstelle zu entwerfen.

Werfen Sie einen Blick auf Sourcemaking Artikel zum besseren Verständnis. 

8
Ravindra babu

Eine Fassade ist dafür ausgelegt, mehrere Dienste hinter einem einzigen Dienst-Gateway zu organisieren. Ein Adapter bietet die Möglichkeit, eine bekannte Schnittstelle für den Zugriff auf eine unbekannte Schnittstelle zu verwenden.

8
Mike Burton

Fassade wird normalerweise mit Adapter verglichen. 

+--------------------------------------------------------------+-----------------------------------------------+
|                            Facade                            |                    Adapter                    |
+--------------------------------------------------------------+-----------------------------------------------+
| Simplifies multiple complex components with single interface | Provides differnet interface for an interface |
| Works with multiple components                               | Works with single component                   |
| Control panel is an example                                  | A power adapter is an example                 |
| High-level interface                                         | Low-level interface                           |
+--------------------------------------------------------------+-----------------------------------------------+
3
Premraj

Ich werde versuchen, dies mit einfachen Worten zu erklären, ohne viel Formalität.

Stellen Sie sich vor, Sie verfügen über einige Domänenklassen und möchten über die Benutzeroberfläche mit ihnen interagieren. Mit einer Fassade können Funktionen bereitgestellt werden, die von der Benutzeroberflächenschicht aus aufgerufen werden können, sodass die Benutzeroberflächenschicht keine anderen Domänenklassen als die Fassade kennt. Das heißt, anstatt die Funktionen in den Domänenklassen aufzurufen, rufen Sie eine einzelne Funktion von der Fassade aus auf, die dafür verantwortlich ist, die benötigten Funktionen von den anderen Klassen aufzurufen.

Ein Adapter hingegen kann verwendet werden, um andere externe Komponenten zu integrieren, die möglicherweise die gleiche Funktionalität haben, die Sie benötigen, deren Funktionen jedoch nicht auf die gleiche Art und Weise aufgerufen werden. Angenommen, Sie haben eine Car-Klasse in Ihrer Domain und arbeiten mit einem externen Autoanbieter zusammen, für den ebenfalls eine Car-Klasse definiert ist. In dieser Klasse haben Sie die Funktion car.getDoors(), aber der externe Anbieter hat das entsprechende car.getNumDoors(). Sie möchten die Art und Weise, wie Sie diese Funktion aufrufen, nicht ändern. Sie können also eine Adapterklasse verwenden, um die externe Autoklasse einzuhüllen, sodass ein Aufruf an getDoors() des Adapters an getNumDoors() der externen Klasse delegiert wird.

3
Pin

Wie üblich gibt es Ähnlichkeiten zwischen mehreren Mustern. Aber ich würde es so sehen:

  • Eine Fassade wird verwendet, um eine gesamte Ebene zu kapseln und bietet einige Methoden, um "bequem" darauf zuzugreifen.
  • Ein Adapter wird verwendet, bei dem Sie zwei Komponenten haben, die bereits zusammenarbeiten sollten, dies aber nicht, nur aufgrund einiger "unwichtiger" Unterschiede in der Schnittstelle.
3
Chris Lercher

Das Adaptermuster ermöglicht die Zusammenarbeit zweier zuvor nicht kompatibler Schnittstellen. Hat 2 separate Schnittstellen im Spiel.

Das Facade-Muster nimmt eine bekannte Schnittstelle mit geringer Körnung/feiner Körnung an und hüllt diese mit einer Oberfläche mit höherer Körnung/körniger Struktur ein. Hat eine einzige Schnittstelle, die durch das Umwickeln mit einer anderen Schnittstelle vereinfacht wurde.

2
wyldebill

Mit dem Adapter arbeiten zwei Schnittstellen zusammen.

Fassade macht eine einzelne Klasse einem höheren und begrenzten Niveau zugänglich. Beispielsweise kann eine Ansichtsmodellfassade nur bestimmte schreibgeschützte Eigenschaften einer untergeordneten Klasse offenlegen.

2
Michael Finger

Nachdem ich all das gelesen habe, muss ich sagen, dass der Zweck von a

Fassade ist Einfachheit

adapter ist Interoperabilität .

0
Vladimir Kornea

Ich habe beide Definitionen gelesen und sie scheinen ziemlich gleich zu sein.

Ja wirklich ?

Ich habe bemerkt, dass der Begriff Adapter manchmal verwendet wird, um zu beschreiben, was in Wirklichkeit eine Stategy ist, vielleicht weil das Wort ausdrucksstärker ist. 

In Zend Framework sind beispielsweise alle Adapter -Klassen Implementierungen des Strategy - Musters, da sie nur nativen Code hinter Klassen einfassen, um mehrere Verhalten zu haben.

Adapter werden häufig verwendet, um älteren Code oder Code "old style" zu verpacken. 

0
mexique1

Das Adaptermuster verbindet zwei inkompatible Schnittstellen, indem eine neue Schnittstelle bereitgestellt wird.

Das Fassadenmuster vereinfacht ein komplexes Subsystem (mit mehreren Komponenten) mit einer einzigen Schnittstelle.

0
Avik Chowdhury

Fassade

Zusammenfassung der Komplexität, um eine einfachere Schnittstelle bereitzustellen. Angenommen, ein Computer-Betriebssystem abstrahiert die Komplexität der zugrunde liegenden Hardware. Oder eine höhere Programmiersprache (Python/JavaScript) abstrahiert die Komplexität im Vergleich zu einer einfachen Sprache (C).

Adapter

Es ist analog zu einem Hardware-Adapter. Angenommen, Sie möchten einen USB device mit einem serial port verbinden, benötigen Sie einen USB-serial port adapter.

0
Arun Ghosh