2010-07-12 2 views
6

Ich kann nicht entscheiden, welches Muster am besten für das folgende Problem geeignet ist.Bestes Design-Muster zu verwenden: Adapter oder Fassade

Ich habe ein Client-System, das mit einem separaten Subsystem interagieren wird. Das Subsystem ist ziemlich kompliziert und deshalb brauche ich eine Schnittstelle zwischen den beiden, um das Client-System zu vereinfachen. Das klingt nach einer perfekten Passform für das Fassadenmuster, aber ich denke, dass das Adaptermuster auch für mein Problem passt.

Macht es einen Unterschied, ob die Schnittstelle in der Mitte einzelne Tasks im Subsystem durch einfache API-Aufrufe aufruft?

Antwort

9

Aus Ihrer Beschreibung ist es mehr in Einklang mit der akzeptierten Definition der Fassade, aber ich würde sagen, es ist eher eine semantische Debatte als alles andere. Facade im Allgemeinen reduziert die Komplexität der Anbindung an ein ganzes Subsystem mehr, während der Adapter eher darauf ausgerichtet ist, eine existierende Schnittstelle oder einen Aufruf an Ihre spezifischen Bedürfnisse zu optimieren (zB die grundlegende Funktionalität ist vorhanden, aber die Rückgabetypen sind nicht ganz das, was Sie wollen). etc).

6

Dies scheint eindeutig eine Fassade Muster Fall Ihr Ziel ist die Vereinfachung, anstatt eine tatsächliche Anpassung.

Fassade Definition:

bietet eine einheitliche Schnittstelle zu einer Reihe von Schnittstellen in einem Subsystem. Die Fassade definiert eine übergeordnete Schnittstelle, die das Subsystem benutzerfreundlicher macht.

Adapter Definition:

Konvertieren Sie die Schnittstelle einer Klasse in eine andere Schnittstelle Kunden erwarten. Adapter lässt Klassen zusammenarbeiten das konnte nicht anders wegen inkompatiblen Schnittstellen.

Definitionen gehoben aus: http://dofactory.com/Patterns/Patterns.aspx

0

Der Unterschied zwischen Fassade und Adapter ist meist die Absicht.

Wenn Sie die Oberfläche vereinfachen möchten, dann betrachten Sie eine Fassade. Wenn Sie die Schnittstelle so anpassen möchten, dass sie als etwas anderes verwendet werden kann, dann ist dies ein Adapter.

Aber wirklich, was ist das Problem, wie Sie es nennen? Meine Faustregel ist, wenn Sie eine vorhandene Schnittstelle implementieren, verwenden Sie wahrscheinlich die Adapter-Schnittstelle. Wenn Sie eine neue vereinfachte Schnittstelle erstellen, ist dies eine Fassade.

5

Adapter Das Muster wird verwendet, wenn Sie die Schnittstelle einer vorhandenen Klasse an eine andere Schnittstelle anpassen möchten, mit der ein Client arbeiten soll. In der Regel handelt es sich dabei lediglich um Delegierung oder Übersetzung von einer Methode einer Schnittstelle zu der entsprechenden Methode der anderen.

Fassade wird verwendet, wenn Sie ein komplexes System vereinfachen möchten, indem Sie einfachere APIs bereitstellen, mit denen ein Client arbeiten kann. Dabei wird ein komplexes Muster von API-Aufrufen in einen einzigen API-Aufruf übersetzt.

Ihr Fall klingt mehr wie Sie brauchen eine Fassade als ein Adapter. Wenn Sie nur das Adaptermuster implementieren, profitieren Sie nicht von der API-Vereinfachung. Am Ende ist es egal, wie Sie es nennen. Und diese Muster sind nicht exklusiv. Sie können beide so mischen, dass Sie den größten Nutzen daraus ziehen.

-3

Fassade befasst sich mit Schnittstelle, nicht Implementierung. Sein Zweck ist es, die interne Komplexität hinter einer einzelnen Schnittstelle zu verbergen, die außen einfach erscheint.

0

Facade Muster (Ein Objekt, das eine vereinfachte Schnittstelle zu einem größeren Code-Code bietet) passt für Ihren Anwendungsfall.

Prüfliste Fassade zu verwenden: (von verlinkten Wikipedia-Artikel)

  1. Eine einfache Schnittstelle erforderlich ist, ein komplexes System zuzugreifen.
  2. Die Abstraktionen und Implementierungen eines Subsystems sind eng miteinander verbunden.
  3. Müssen jede Ebene der geschichteten Software einen Eintrittspunkt.
  4. System ist sehr komplex oder schwer zu verstehen.

Verwandte SE Frage für weitere Details auf der Fassade.

What is Facade Design Pattern?

Obwohl beide Fassade und Adapter Strukturmuster sind, ist die Absicht, verschiedene (samitgaur Antwort erklärt die Absicht Teil schön).

Da Sie nicht eine Schnittstelle zu anderen Schnittstelle Umwandlung Adapter dienen nicht Ihren Zweck.

Verwandte SE Frage:

What is the difference between the Facade and Adapter Pattern?